217

ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��� � � � � � � �� ���� � ��������� ��������� � ���! " �$#&%'����� �

(*),+�- (.)/+1032415�674 +�8 )/+ 9;: :<>=@?BADCFE�GIH'?�JLKM?BNPORQBHFSUTWVYX@Z\[^]M_3`bac[d]Y]

e APSbE�Of?gQBOIhiORQjEkOl?$Vm]M]XYnMVm]M]Yo@prq�sut vxwH'?BAzy|{

}'~d�������1�� �����7~d� �k� ���,����� � � ~���~^� � ���,��� ~��'� �g� ��� �c��^�R��� ~d c��¡ � �£¢ �¤�¤¥

Page 2: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Page 3: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Contents

Contents 3

1 Introduction 7����� �������� ��������������� �������������� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� #��� � $%�'&)(��*��+,���������� -�������.�"&,���0/�� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � �

��� �*��� 12(���3����4�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � �

��� �*� � 5,���6�.����7� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � �

��� �*�98 5,���6�.:;3��<�=�!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8��� �*�@? AB�C�7�� �3������D+E�F+G3����H�!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I��� �*�JI K2L M3�NL�����O� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I��� �*�9P QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>P

2 Foundations 17�*��� SUT���+E3V5XW WY���������� -� � �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#

�*������� 5,����������3�+, -��(ZL ��[��:;3\� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��]�*����� � ^_�.`<�:�(.� (�������`73���a[��+"�!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �F��*�����98 bc���!�d ����dNL:.��`<30�����e� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �F��*�����@? fg ��:���+c -��(Z�<hi�<`<3�+ � �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � �

�*�����JI bj�*�C�<+V -��(ZNL:���`<3������. -���3k�l�!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � �

�*�����9P mn��30�<�� -�+ � �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��8�*�����Jo fg M���L �p.���+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��8�*�����9# ^_(.�<��3���T.�<�0+% -��(Z�. -���<+ � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��8�*�����9q ABp.rs��`<3�+l� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �-?�*�������>]t1vu*�.�0��+0+0������+w� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �-?�*���������xmya- -�:���+X -��(��0a- -�:���+ �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��P�*������� �tAB�C�7�� �3�����+z�!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��P�*�������>8|{�3� �3������<��3�+ � �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��q�*��������?|QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� 8;��*�������'It} �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� 8�?�*�������>Pt1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� 8�?

�*� � ^_��3������<��+�� �!� �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� 8�P�*� �*��� SV+0+0��`��L �3��~aF��3k�d -��(������<`���(�����`��!��N����C�<�� �30����+��"�"�"�"�"�"�"�"�"�"�"�"�"� 8[o�*� �*� � 1vu*�.�0��+0+0�����Z3E������+ �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?[]

8

Page 4: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

? �������������

�*� �*�98 1 a- -�:. �3����.�D�7u*�.�0��+0+0������+d� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?���*� �*�@? S%����3������<30��`V���C�<�� �3�����+c����3����R3s���C� ����3 � �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ? �

�*� �*�JI AB��(��<�%��N �<h ��`<3�+% -��(Z+0� ��:.�<�.`<�"�C������3�+O� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?�I�*� �*�9P fg ��:��R�� -����� � �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?�o�*� �*�Jo bc���"3k���C�":���+0��������( ����3 � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?[#�*� �*�9# ���~u;��(��7uF������+E+0������+V -��(Z`<����a[�<��+E������+U�!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?[q�*� �*�9q �g���. ��0�d���<������+E����3� M3������ � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ?[q�*� �*���>]t^_��3������� -C3s���C��+ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I �

�*� �*�����xQR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I �

�*� �*��� �t} �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I-?�*� �*���>8t1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I-?

�*�@8 �g������> -��+B� �!� �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I�P�*�@8F��� �g�*����> ���NL:���`<3�������+ � �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I�P�*�@8F� � bc���"3k���C� pi�*�� � �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� I�q�*�@8F�98 {*�.���E3%`��~��`�:���3c�<a- -�:. �3������ �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P;��*�@8F�@? K ���<(.��`> �3���+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P;��*�@8F�JI QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P�?�*�@8F�9P } �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P[I�*�@8F�Jo 1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P�P

�*� ? 5 ����30�0��n{�3� �3������<��3�+ � �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P�q�*� ?;��� {*�����`<30�������2��N�� -��(Z��N��_���+0��� +E3� M3���������3�+,�!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� P�q�*� ?;� � ^ 3��<�� �30�������2NL����� +E3� M3���������3�+ �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� o�]�*� ?;�98 �g��*`�/F+=�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� o-?�*� ?;�@? ^ 3��<�� �30������� &%��������_+E3� �3��<������3�+ �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� o�#�*� ?;�JI ^ 3��<�� �30�������2(����_+E3� �3��<������3�+=�!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� #�]�*� ?;�9P �-:��6��+E3� �3��<������3�+=�!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� #;��*� ?;�Jo 1���:.�~a� -�����`��"��N���3��<�� M3������+E3� �3��<������3�+!�!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� #�8�*� ?;�9# 5,���*��+E�����D3������G��������3�� �~3��<�� �30����� +G3� �3������<��3�+ �"�"�"�"�"�"�"�"�"�"�"�"�"� #[I�*� ?;�9q QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� #[o�*� ?;���>]|} �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q�]�*� ?;�����x1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q;�

�*�9I ���[ �3������ �C������3X��:��DpC�7��+ �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q[I�*�9I*��� bc���"3k���C��+"! �[ M3% ��.(�(.��:;p.�� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q[I�*�9I*� � ���~u;��(��7uF������+E+0������+ #.`�����a[�<�0+0������+ #. -��(�����������3�������+ �"�"�"�"�"�"�"�"�"� q[o�*�9I*�98 1vu*� ���`���3c`�����a[�<��+0������+ �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q�#�*�9I*�@? $%�����+c��� 30�.�Ra- -�:�� �� -�����U�!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� q�#�*�9I*�JI ���[ �3����.� �C������3,�*:�� pC�<�c+E�F+G3�����+��!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>]�]�*�9I*�9P bc��� ^ 12121w+G3� -��(. ���( o�I-? �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>]�8�*�9I*�Jo 5,���6�.:;3������ &V�~3��$!.�[ �3����.� �C������3c�*:�� pC�<��+U�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>]�?�*�9I*�9# QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>]�#�*�9I*�9q } �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ���>]�*�9I*���>]t1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �����

Page 5: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��������� ��� I

3 Functions 1138F��� SUT���+E3V5XW W NL:��.`73������ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ����?8F������� K ����� -��(��i��+E3�`�����(���3�������+ �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ���'I8F����� � �:���`<3������Z(��<T.�.�~3�������+ �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ���>P8F�����98 �:���`<3������Z`> -��+ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ���'o8F�����@? �:���`<3������.+X -��(Z+0`<���C�\�!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ���'o8F�����JI bc���"3k���C� a[����( �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��]8F�����9P ���*(�:�L ���� � �3������\� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��]8F�����Jo �%+0�����D���p��� ��0�dNL:���`<3������.+c� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��P8F�����9# QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��o8F�����9q } �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��#8F�������>]t1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� � ��#

8F� � �c��`�:;��+0����� �!� �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8 �

8F� �*��� Sx&c ��0� � :;� � �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8 �

8F� �*� � bc���!`� -�C+E3� �`�/ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8�88F� �*�98 � -+0��`R���� -`<3���`��d�!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8�?8F� �*�@? �X��`�:;��+E������a[�<��+E:.+X��3��<�� �3�������� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8�P8F� �*�JI K ��������3���a[�V���<`�:;��+0�����w� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8[o8F� �*�9P mn����(������d ��[�<�c+E�F+G3�����+ � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>8�#8F� �*�Jo QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��?�I8F� �*�9# } �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��?�I8F� �*�9q 1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��?�I

4 Classes 149?;��� SUT���+E3V5XW W `�L -+E+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�]?;������� 5,L �+0+X(��<T.����3������.+, ��.(����6�.���������3� �3�������+ �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I �

?;����� � Q M3� �����Dpi�<��+ � �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I �

?;�����98 �����Dpi�<�%NL:���`<3������.+ � �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I �

?;�����@? K2:;p.���` -��(�������a- �3��H� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I-??;�����JI 5,����+E30�0:.`73�����+ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I-??;�����9P SV+0+0�<�E3�������+d�!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�I?;�����Jo QR�<N -:��3c`�����+E30��:�`<3����X� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�P?;�����9# �%+0�<� �_(��<T.�.�<( `�����a[�<�0+0������+d�!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�P?;�����9q AB�C�7�� �3�����+% -��(��'a[�<����[ �(.���.�D� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�o?;�������>]|ABa[�<�0��[ -(������D�0��+0���:;3�������� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'I�q?;��������� 5c -���_p�� �_a- -�:�� -��(Z`> ����_p�� � ����NL�<���<�.`<�O�!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>P;�?;������� ��bc���"T���+G3%`�� -+0+,���<aF��+0��( � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>P�??;�������>8|} �[ -�+ �!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>P[o?;��������?|1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>P[o

?;� � QV�F�. -����`V(. �3� +E30��:�`<30:��0��+ �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'oF�?;� �*��� K�������30�<�X3k���C��+x�!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'o�8?;� �*� � 1vu*�.�0��+0+0�����Z3E����� NL:.��`<30�����. -���3k� � �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'o�I?;� �*�98 5,������+0�<�d -��3���`�+6� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'o�P

Page 6: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P �������������

?;� �*�@? bc���!`<���.+G3 ��: ����T.�<�w� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �'o�o?;� �*�JI QB�*�. -����` {�3����� ����"SV���*`> M3������ �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#�8?;� �*�9P 1vu*�.�0��+0+0�����Z3E����� `�����+E30��:�`<3������ � �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#�??;� �*�Jo QR�<+E30��:�`<3���� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#�P?;� �*�9# SV+0+0������������3U� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#[o?;� �*�9q 1vu*�.�0��+0+0�����Z3E�����" �����3������<30��` � �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>#�q?;� �*���>] �������!�7u*������+0+0������30�����"NL:��.`73������. -���3k� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q;�?;� �*����� ;�0������(\�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q �

?;� �*��� ��QR�73� -���+%�!� �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q�8?;� �*���>8t1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q�?

5 Generic Programming 197I*��� ;:���`<3�������b����6�.L �3��<+ �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q�#I*������� b����6�.L �3��RK� ��� -���<30�<��+ � �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q�qI*����� � b����6�.L �3��BSX����:�������3�+!�!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� �>q�qI*�����98 b����6�.L �3��R M����:�������3,(���(�:�`<3������y� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��]�]I*�����@? ABa[�<�0��[ -(������ � �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��]�8I*�����JI {*`����C�"�0��+E30����`<3������ �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��]�8I*�����9P QR��`�:�������30����� �0� �*:������<������3�+ �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��]�8I*�����Jo 1vuF�<��`���+E��+ �!� �!� �!� �!� �!� �!� �!� �!� �"�"�"�"�"�"�"�"�"�"�"�"�"�"�"� ��][I

A C++ Operators 207

Index 209

Page 7: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Chapter 1

Introduction

o

Page 8: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

# ������� ��������� � � � ����� � ��� ���

1.1 Why learn programming?

������������� ���"!$#%�'&)(+*-,.�/#0�213�4,5�6,7��!$89(0:;�<�>=?(0=�!�@$=�,.8 �/��A?,.#�BC13��DE�/�F���G�/8?H(I!$=)�J,.#0��KL!$=MDN!$:O# !.�?!$#0*PDQ�<! :.+E� ��!$89(0:;�<�>=R(0=>!�@=�,.8?��ARS :4�?,5*T��!U�<! &X����3���V�;�>8GW

���.�<�z�C�����.�� ����.�� NL��� 6rG��p 3�����+0�(. >�*+ # 3�������� ����+0:�����3k�*�.��`> ���� `<����3� -���.+ +0�<`<3������`> -����( ��!$8X(0:4�<�>=Y�>Z���*[*T� � ^ 3�����+%���+E3��<( 3����<�0�D��������3V���.`<�:�(.�]\ !$=�B #_^ &`���>* #n���9a !$1b�>=<(I!$�[#0� �b,�.�<+0� ��0� 30�.� �. -����+d��N , (c(+*d�J�',5���J!$#O(0=>!�@$=�,.86� #V���������� -��+630� M3 �. �a[� pC����� &X����3030��� p��`��<�E3� -���d�C�����.��fe_���d3���� �pC�'a[�R`> -+0��+ # M3�����`<����+0��N�3c`����E�C���� �3������4g 3��Dpi� :�+0�<(�p*�d��3����<�,�C�<��� ��e_NL���X�7u� ��6� �� #; +� -���+,���<�����<+0����3� �3���a[�)g �bc��� �h!$8X(0:4�<�>=i�>Z��/*/*P� +0��`<3���������������3j -�+E�!���+G3g��30����+ ���/[�kj �mlMn #0o ,.pq, #����srkt9t"�2b,����+0�

�����3�����. -����+ ��N (0=>!�@$=�,.8Y86�[#;@�*-,.#;@$:u,$@c�>� #j� -����: �����+ :�+0��(z3�� ����+E30�0:.`73 # ���D���������� -� # `����6�.:;3��<�>� �X+0����� ���������� ����������"L ��.��:. -����# DN!$: `> -��&X����3��V3����B���������� -��+ 30� M3 &V��� +0:;p +E����*:�����3���dpC� :�+0��(Zp*���3����<�0+ #����Xp���[��:;��+E���N �S `<���6� :;3��7����������� -� ��+� ���+G3d��N ����+E30��:�`<30������+d30� pC� -:;3����d �30��`> -�~� ������`���+0+0�<( p*�

`����6�.:;3��<�>� b,���D`<���6� :;3��7�R��3�+0���N2��+B+E3�:;�.��(wv -� 30�.� ����3�������������`�� `<������+BN������ 3���� ���������� -� �^_� 30�.��+ +0����+0� #g ���������� -� NL��� 3����`<���6� :;3��7� ��+ ���/[�d `�����/*pC����/ ����`��~�C�dNL��� +E�����������6&V���`> -������3B`�����/ � �<a[�<� &%��3��Za[�<�0�Z�������3��<( +E/*����+ # ���6�����<+0+0��a[� ����+0:��3�+%`> -� pC� ��p�3� -���.�<( #�3��;����:���� +E3��<� �_p�� �_+E3��<� ����+E3E��:�`<3������y�

����+E3B�C�����.��"+0���6�.��d:�+0� ���������� ���+ #�rG:�+E3V���/[�!3����<��:�+0� `�����/*pC����/F+��cS +� -���+%���<�����<+0����3� �3���a[��#nNL���"�7u; -�6�.�� #C������(�+ M�.�.���`> �3������Z���������� -��+R -+R3��*���+BNL���"����+R&,���0/i� b,��� N -`73"3��. �3R�[��: ����c���> -(������ 3�����+j��<3�+g:�+2pC������7a[�c3��. �32�[��:6�C��3��<��3��L ���� pC�<������"3��!30�.�X`> �3��<�����0�D��Ni�C�����.��,&V��� -�+E� ������(Z30� &%�0��3��B���������� -��+��bc���<�0�R ����V�d -��� �0�> -+0����+ NL��� &X����3������ �.�0������ -��+�� {*�����X���6�.��'�[�<� ��������3j� ��6NL���,�~3 #�+E�����

p -`���������X`���:;��+0�!��������3 ��� ��:������ ��3 #;p.:�3X:��3����d M3����� #�3����<���"��+X (����<�C�7�X���� -+0���ZpC��������( ��3X30� M3&,�X�.L �� 3�� �7u*�.L -���6���7u*3>� b,�.�%:��.+0����3j��+j30� M3g���'&c -(. >�*+ #��[��:�`� -���.��3jpC�V +0�<������:.+j�������������<� #��<3g -������X "+0�7������:�+j+E`�������3���+E3 #[&V�~3�����:�3j �3j��> �+E3 +0����� p -+0��`X���������� -�������.�%+E/F����+��v1va[���d���6��<+0++0�<�0����:�+V`�����30�7uF3�+ #i&,� `> -� ����`��������<�.( 3�����> ��0� ���������� -��������� #*pC��`� -:�+0� ��3V`> �� p��������� MpC��:;3 ���3c��N�NL:�� -��(Z+� �30��+0N -`<30�����y�^_� 30�.�63k&,����3����<30� `<����3�:;�0� #v`<���6� :;3��7��+ �. �a[�6���<a[���:;3�������� � ��( 3����6&c �� +0`����<�.`<�d -��( ���������

�����<�����.� ����(��������zb � pC��������d`�����`<���73�� #g&,�d&V��� :��.(��<�E� ��� 3�����+ &V�~3��z ��4�7u� ��6� ���N�������d �3������d M3���`�+��0x2��:��.�0��p Mp ~� (����0y 3 � uF�C��`73X�d M3�� 3�� pC�V���<��3���������(6T���+G3,���d`������.�<`<3�������&V�~3��`����6�.:;3��<��+�z ����(.�<��(�# �d -��� �d M3������d �3���`<�L -��+!+E30��� :�+0� � ��i�<�� -��(z�i����`���,���w (. -���� p -+0��+���g:;3 13�4,5� 3����<��&%����30� (��M&%� �. -+B`��. -������(y� �g�<NL����� `����6�.:�30�<��+%&,�<�0� �a- -��L Mp �� # �~3B&c -+B��N�3��������`���+E+� ��0� 3��B&X����3��j(.�'&V� -`<30: �*�*:�� pC�<��+ #� -��(D30�V�C�<��NL����� `� -�`�:�L �30������+n&%��3�� 3������ p�� �. -��(n�b,�.��+!�. ����C������( ����3 +E� � :�`�� ���=&X����3������d�����*��NL+ NL��� �.�7&|3��������0����+ # p.:;3 ��� 3���� �����*`<��+0+ ��N{ #�B.�/#;@ 30�.�<+0�V3�������������+<�jb,����+g������`���+0+,��N�3������� ��:.�~����+ 3�� ��� �Ma[�7�X�d ����6`<���.`7���<3��R�7u; -�6�.���+ #���c`���:���3��7���7u� ��6� ���+ #*��� ����(��<�,3��D+0���R`��7�03� -���� �303��<�0�.+ #F���,3�� (.��+0`��'a[�<�X30� M3,+0�����V+E3� M3���������3��+ N -�+0���wb,���Z`����6�.:;3��<�D�. -+ 30�0��������(���:.+E�� -`�`��<��<�� �30��(43�����+ ������`���+0+ p*� 3� �/F���.� �Ma[�7�63��������:;3������!&,���E/i�R� ����� �[��:=�����/ �3 6�d M3������d �3���`<�L -�0y@+,����3��<� -( 3���( �� #i�[��: +E3���� T.��( �����<�</��<3E3��<��+X -��( -�i/*����(�+X��N +E30�� -����� +E�F� pC���+ #*p.:�3X����+E3c���/[�<������ ��:.� pC�<�0+c� ������<�c3��. -� 30���y�

Page 9: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � ����� ��� � � ��� �����3���?� ����� q

bc���<�0� ��+�����Z3����.��`Z30� M3d�.��`�����z����:�+E30�� �3���+ 30�.� +E��3�:. �3�������#c -��(w3�����+���+63���� +0�> M��`�� NL���3���� lU�>=)����#I# �f(0= �[82� � �R^_�z�>P�?�? #.3����� ;�0����` � �����;/Z -��( �d �3������d M3���`��L �� �Z ��0��� ���<��+0���������+E3� �p.���+0����(3����"NL�����M&%�����D`<L -��� �

Mersenne’s Conjecture.�m�;�M#I:N8�S��>=)��! KM�V�;� K�!$= 8

2n − 1,.=>�R(0= �/8��

#I:N8�S>��=)� K�!$=n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127, 257

A S :4� K�!$=F# !2!.�V�;�>=F#I:486HS��>=

n < 257W

���<��+0�<�.���`����0���<+E�C����(���( &%��3�� �d -��� ��N,3�������> -(������Z�d �30�.�<�d �3���`��� -��+" M3 3��. �3 3�������# +0�����+g`<���[rs��`73�:;���VpC��`> ����X&V��(.�<�� /F���M&%�y� �X�d3��

n = 7#��[��:d`> -��a[�<�0��N��6��3j&V������,�[��:����> -(�3�����+ #

-��(Z���=�>P�?�? #F3����"`<���[rs��`73�:;���"&c -+X -��0�> -(;��a[�<����T.��(�:���3��n = 19

�^ 3 3�����/ �������D3��. -� �*:���(��0��( �[�> ���+ :���30��j3����6���7u*3 �7uF�i���.�<��3 ��� ���<��+E�����.��y@+ ���+E3!`���:��(

pC� a[�<����T.��(y��^_�U ��7303��<�d3�� �g�<������:����V�.:;p.���+0����(���� �'o�o � #%mn�<���.�. ��0( 1 :.��<� �����'a[��( 30� M3231 − 1 = 2147483647

��+ ���������d�*:�� pC�<�>� �g:;3 ��� �>#[o�P #g -����3����<� ��:��.(;���<(z�[�> ���+ L �3��7� #���<��+E�����.� �C��+E3���:.����:�+0~�Z����`��<��a[��( ���> �a*� p.��'& � 12(���:. ���( my:�`> -+"�����'a[��( 3��. �3

267 − 1 =

147573952589676412927��+ # !.� V���������g�*:��Dpi�<��e my:.`� -+v+0���M&,�<( ����+v� -+0+0�����DNL���2L ������ ��:�� �

pC�<�0+v -�+0�X&V����� ��� ����a[�<��3���( 3���� ��!$1b�>=i! K j ,.# !$� � : � � ��)g7�vmy:�`> -+>y +������*��N;(�����+ ����3�&,���0/"3����&c �� �[��:�&,��:��(6� uF�C��`73 � ��3g(�����+ # !.� �7uF�.�~p �~3 R�.�0�����XN �`<3���� ��N

267 − 1e 3����%����+E3j(�������`73g&c ��

��N������'aF����� 30� M3V D�*:��Dpi�<�%��+X����3%���������)g�#Fp.:;3%��3%:�+0��+V D`���<a[�7�B����(�������`<3% �����:�������3c����a[����3���(p*� mn:�`> -+B��� 30�.�!+� -���!�[�> M�>�Rbc��� N -`73�������+� M3������ ��N

267 − 1���<�d -������( :��;/F���M&%� NL��� -����3����<�

��I �[�� ���+��^_� �>q�]�8 # F�� ���/ X���+E��� 5,����"&c -+X+0`��.�<(.:���<( 30�6����a[� D���`<30:��0�"3�� 30�.�!SV���<����`� -� �Z �30�.���

�d �3���`> -y{*��`����<3k� #;&V����+0�R3���3���R&c �+��JAR�Z3���� . �`<3�������+0 �3��������Nvmn ������� X:��DpC�7��+>y��j5 ����R&,����3c3��3���� p.L -`�/*pi�[ ���(�#C -��( &V��3�����:;3V+0 >�*����� 6+0�������� &,����(�#i��� T���+E3B&%�0��3�� (��M&%�= 6`> ��`�:�L �3�������3����p�3� -���

267 − 1p��d���<�C�> M3���(Z�D:��3����.���`� �3������D&V��3��3k&,�;�g$%�RT.�. -�����. -(3����!��:.� pC�<�

147573952589676412927

��� 3����cp � -`�/*pC�[ ��0(n� bc���������X&X����3��c(��M&%�� -����3����<��e_� :�`�� �����0�X����3��<���<+E3������5g `> -�`<:.� �3������DNL���3����R�.�0�*(�:�`<3%��Nn3k&,� �*:�� pC�<��+<�

761838257287 x 193707721

------------------------

761838257287

6856544315583

2285514771861

5332867801009

5332867801009

5332867801009

1523676514574

761838257287

---------------------

147573952589676412927

Page 10: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>] ������� ��������� � � � ����� � ��� ���

5,����V�. -(6�����Ma[�<(3��. �3267 − 1 = 761838257287 � 193707721

#-�d �/*�����"3����c����+0:��3 ��Nymn:�`> -+pC������<a- �p.��"3��d�<a[�7�0�*pC��(;� �

267 − 1��+V����3 ���������"�*:��Dpi�<���R$%� ���<`�����a[��( +E3� ��.(��������'a� M3�������+

NL���c3�����+, -`�`����6�.���+0��������3g -��(�L M3��<�X -(�����303��<(63��. �3,���"�. -(&,���0/[��(����T.�.(������ 3�����+0� N -`<30����+�<a[�<�E� {*:���(. >� NL���c3����"L �+E3,3��;�����"�[�� ���+��b��*(. �� #��[��: `� -� +E3� ��E3R `����6�.:;3��<�% -����7p.�� D���������� -�H��� �[��:;�B`����6�.:;3��<� e D�C���.:�L ��X�����

��+Maple

g�#.3k�*�i�"���

ifactor(2^67-1); -��(�&%��3������d���+0+c3��. -�Z +0��`<���.( ���73X3���� ��:;30�.:�3

(761838257287)(193707721)b���+E:.���d M��� � � �X�*:���(;����(=�[�> M��+ -��� #n �p��������� -��3%�d �3������d �3���`��L -�Z�����<(.�<( 3��;����� �[�> ���+R3��

`�������:;� &V��3�� Z����+E:.~3 3��. �3 � :�`�� ���+0+ p��������L -��3 �C�����.��Re &,�d ����d����3 3� -�/*����� �pC��:;3 �[��:Ng`���:��( ���<3 ��� ���+0+ 3��. -� +0��`�����( 3��*(. �� # :�+0����� �`����6�.:;3��<� -��( 3���� ��������3!���������� -� � b,�.��++0���<��+6(���+E3�:;�0p.����� M3 T���+E3�+E������3 # -��(w30�.����/*����� �pi��:�3 3���� ������`<����:�+ 3��������NB����+6���NL�Z5,����(��<a[��3���( 3�� 3������.�0��p ���� #��[��:z�d ��=�<a[���4NL���< +0���0�0� NL���D����� �?x2��: +E�.��:��(��0y 3>z2�� M3����<� #v3����+E3����E� �. -+,3��;�����"���6�C���03� -��3 ���+0+0����+c����+E30�������

Tool skills.my��+0+0���D�����c��+�3��. �325 ����y +v`> -�`�:�L M3�������+n&,�7���,�7uF30�0��������!(.���6`�:��3 #�����a[��� 3���� 3��*���+

���"�. -(�e � ��C�<� #F�C����`��� #F -��(�������p �p.��6a[�<�0� ���*��( ���<��3� -y M����3������<3���`)g7�v}R��a[���3���� 3������+ DN!$:�. �a[� e 3���� `����6�.:;3��<�B ��.( 6`����6�.:;3��<�V -����<p��� ���������� -� `� -����(

Mapleg�#n5 ����y@+%`> -�`�:�L M3�������+

�����> -+G� �0��:�30�������=� � ����+0:;���d3��. �3 5,����d&,��:��( NL����c+0���0�E� NL��� -���[���.�:�+0����� 3�����+0��.�7&3������+j������ 3��"���<�����*(�:�`��X+0�����X��:��.(;���<( � �[�> �� ���(6`> -�`<:.� �3������y� �X+0��NL:� ���<&w3������+j��> -(63��"�.�7&�C��+0+E��p.�����3�����+� ��.(D`��. -����������+<� AR�D3����,���.� �. -��(�#�3�����+ ,5*[* !$13� �[��: 3�� (.�R�������j3��. -�D�[��: `���:��((�� pC��NL���0�z ����30�.�"��3����<�V�. -��( ��3% -�+E� K�!$=���� � �[��: 3�� (��6������� ��N��[��:Z&c ���3c3�� /[���<� :;� &V�~3��3����!(��<a[�<����.������3�+<� � �. �30�<a[�<�%�[��: (�� #.�.�'&c -(. ��F+c�[��: � :�+E3V -` �*:����0�! -��( �d -����3� -���� �3%��> -+G3+0�����Bp -+0��`R/F���'&V��<(.���R��N `<���6� :;3��7��+c -��(Z ����.���`> M3����������������� -��+��

Problem skills.my��+0+0��� 3s&,�D��+,3��. �3 3�����y+E/F����+, -������B&,��:��( ����3c�. �a[�"������i��( 5 ����B3�� N �`<3����

267 − 1�B5 ���� -�+E� &c -+B 6�����*( �d �3������d M3���`��L ��d&%��� /F���<& 6���3V��N 3��������E� ��� `���:��( :�+0�!3��

+� �a[�!`� -�`�:�L �30������+��vb,�.��+X��+,3����R���> -+0�����.���E������ �D������(���(Z3��;���<�"�[�> ��0+��1 a[�<� ���'&c -(. >�*+ # `<���6� :;3��7��+V -��( ����.���`> M3������ ���������� -��+% M��� ����3B�<a[�<�E�*3��������;�Xbc���<��� M���

������p.�����+�30� M3 ����c -+vN ��2N������� V+E���:;3������D -+ 3����<� &,�<�0�c��� ������� `����6�.:;3��<� (. ��F+�� ;��� �7u; -�6�.�� #&,�+E3����g`> -������3 `��. ��� -`73��<��� � �3����d�7u*�C��������3�+ n

NL���D&V����`�� 3�����*:�� pC�<�2n − 1

��+D ����������*:�� pC�<�>�2� � (����0y 3X�<a[��� /*�.�'&)&V���<3����<�X3����<���! ����!����T.����3��<��d�d -���d+E:.`�� ���<��+E�����.�"�.�0������+��^_N%�[��:z�.L ��z3��=�d M/[� `�����30����p.:;3������ �.�7��� #g�[��:4+E�.��:��(z�.��3Dp.:;�z N -+E3��7�6`����6�.:;3��<� &V�~3��3����dL �3��<+E3 a[�<��+E�����z��N

Maple#2p :;3 +E30:.(;� �d �30�n� 1va[���4��� 3�����`> �+0�d��Nc������p.�����+!NL���D&%����`��

`����6�.:;3��<��+,`> ������> -���d`�����3E����p.:;3�� 30�6e_���% -`<3�:. -���6T.��(4g 3���� +0���:;3�������#*�[��:�3k��� ��`> -���d�����<(�3���. �a[�B "(����<�:���(��<��+E3� ��.(������"��Ni3����%������p.����t��������(��<�g30� /F���M& �;!$1 3�� :�+0�%3����X`����6�.:�30�<�>� ^_N�[��: &c -��3 30�VpC��`������ ��D�<�.�����.�<�<� ��� V+0`�������3���+E3 #-�[��:D� :�+E3 -` ��:.�~���, -��( �d -����3� -��� c�.�0��NL��:.��(/F���'&V��<(.���g �pC��:;3n3����g������p.�����+C�[��: &V����pC�g(.�� -������,&V��3��y��bc����+ N -`<3 &c -+n30��:�� ��:.��(;����( �[�� ���+ -��� #� -��(���3j��+g+E30���;30��:��'v `����6�.:;3��<�0+2�. �a[�V����3g�[�73 ��> M������(63��!+E���a[�V����3��<����+G3������"������p.�����+vp��3�������+0�<�a[��+��

Page 11: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � ����� ��� � � ��� �����3���?� ����� ���

Programming Skills.my��+0+0��� 3��;����� ��+����.� 30� M3 5 ���� (���( ����3v���a[�g30�B+0��� � ���'&c -(. ��F+ #-������p.��<� �

+E�C�<`���T.` /F���M&%���(���� `> -� pC�D30:��0�.�<(=����3��������p.��<� � +E�C�<`���T.` `����6�.:;3��<�B���������� ���+�� b,�. �3R&c >� #3����,+E3� �30�c��N�3����c ��03 `�����`��7��������� ���7��+0�������X���������<+ �. -+2 -(;a� -��`��<( �*:���30� N ��>� ^ 3 3�:;����+v��:;3230� M3���<��+E�����.�"�. -+,�d -(��VT.a[� ����+E3� �/[��+ �

n = 67 -��(

n = 257��� ���7��+0�������y@+c���+G3,(.� ����3X��> -(d3��

��������� ��:.� pC�<�0+>zy���=3���� ��30�.�7�"�. -��(�# ���<��+0�<�.��� � �+ �@NL��������303��<�+yi30�.�D�7u*�C��������3�+n = 61, 89 -��(

107�

SV+ ��N,AB`<3���pi�<� ��]�][I #y&,� /F���'& ? � ���7��+0������� ����������+ #n3���� L �������+G3!��N &%�.��` �=� �+ -� �7u ��C��������3V��N

n = 25, 964, 951� �g:;3V(����0y 3XpC������7a[�"3��. �3X3�����+%�����"&c �+VNL��:��.( &%��3��Z��h �_3������_+0�����N

���������� -��+<� 1va[��� -N�3��7�"�[��: �. �a[�6 -` �*:�������( 3���� &V������ /*�.�'&V� 3��������0� ��N"���<��+E�����.� �.�0������+ #�[��:�&,���0y 3,pC�" �p.��B3�� T.�.( 3����"?[8-��( ���<��+0�<�.��� �.�0�����V&V��30�.��:;3 &X����3������ ���������� -�O�[��:;��+0���N #`<�� �������(&%��3��d3���� /*���M&%���(���� �[��:�� �a[���K �0��p �����+ �*`�`<:��0����� ���3����"(. -��������NL�R��N� -���������������7�%���% +0`�������3���+E3X ��0�"��N�3��<�Z����3X�� -+E�d3��

+0���a[��#i�<a[��� &V��3�� 6`<���6� :;3��7�B �3B�. -��(y�R^_� ����(��<�B3��d �3E3� -`�/Z3������ #.�[��: �����<( �<!!.*��>Z���*[*T� NL���3����6����:;3������6`� -�`�:�L �30������+ #� ��.( (0=>!�S)* �>8 ��Z���*[*T� 3�� :��.(��<�0+E3� -��( -��( � uF30�� �`<3 3����d -+E�C�<`<3�+ ��N3���� �.�0��p ���� 3��. �3!`� -� ���=�������.`<��� -�pC� +0���a[��(=p�� d`����6�.:;3��<�>� �g:;3"��� 3���� ����( #y�[��: ������((0=>!�@=�,.868Y�/#;@ �>ZL��*/*P� 3�� -`<3�:. -���d(�� ��3>�

Page 12: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � ������� ��������� � � � ����� � ��� ���

1.2 How does programming work?

������������� ���"!$# �'&)(+*-,.�/#0� 13�4,5����� =>�',5*/*dD 82�',.#0���<!��/1�= ���<�s,�(0=>!�@=�,.8��)A ,.#�B9�;!$1D`!$:C�>#�,cS)* �F�V�;�6�h!$8X(0:4�<�>= �<!6= :N# �/�JW�� !$=F�V���/��A�1k��B � ���>= � S>� �V�;�X�[#;@$=>�hB.�"�>#0�V��[#Ip�!.*Ppw�hB �/# �V�;�3(0=>!�h� �>��� �V�;� �<(.�~3���� A��V�;� `����6�.����7� A_�V�;�F��!$89(0:;�<�>=i�/�V��� * K�A�,.#�B�V�;� ���C�7�� �3������ +E�*+E3���� W���!�@�� �V�;�>= AX�V�;� ���9K�!$= 8 �V�;� �.L �30NL����� !$#O1����"� �CDN!$:,.=>�X1�= �����/#;@X(0=>!�@$=h,.8?�LW

1.2.1 Editor�=�0��3������" R���������� ��|��+2����3g+E� (���hi�<�0����3jN������|&X����3����.� R��<3030�<�>�2AB�.�%`����6�C��+0��+2 R3��7uF3 #�3��. �3j��+ # ?e_�����C��NL:��~� gc���� -��������NL:.n+0� ��:�����`�� ��N2`��. ��� �`<3��<��+<� �X+0:. -��� #.3����<��� ���� `<�<�03� -��� `<����a[����3�������+��� ���'&�+0:�` �6 B30�7uF3j��+ +E30��:�`<30:��0��(�#* -��(D3����c�.:;�0�C��+0�,��N.3����c3�� uF3j��+v3�� 3E�� -��+E�C���032����NL�����d M3������y���� M3X�. -+ pC�<���Z+� -��( +0�DN ��% ����.�����+g30�DpC��30����<3E3��<��+, -��(�.�0������ -��+����g:;3,&V�����&%����30�����

���������� -� #�30�.�7���%��+j -����3����<�g -+E�C�<`<3g3��. �32�. -+23��"pC�c3� �/[��� ����3��! -`�`���:���3 �vS����������� -��� �+j3�� pC��G���> �( �6p�� `<���6� :;3��7� # ���� -������� 3��. �3%��3V�D:�+E3VpC� �a- -��L Mp �� 3��630�.�!`����6�.:�30�<�V��� �<���`<30�0���.��`NL����� �d^_� 3����6NL:;3�:;����#�&,�6��������3 pi�6 �p.��D3��Z���� -��� (.��`<3� �3�� 3���� ���������� ���3�� 3����6`����6�.:;3��<� #p.:;3 ���M&c �( ��*+ #�3����X`���������� &c �� ��+j3�� :�+0�V /[�<��pC�[ ���( -��(�+0���6�.�� 3k���C�%��3g���y�vSV� �hB.�/�<!$= ��+ -�� ���� ���`> �3������d���������� -� 3��. �3X -���'&V+ �[��:3�� (���+G� � >� #����*(���N�� #* -��(Z�����`730��������`> -���6+E30�����R+0:�` �3k�*�C�<( �_��� 3�� uF3>� b,���X:�+0�X��N ��(���3����0+j��+2����3 ����+E30�0��`<3���( 3��"���������� ���������� #���Ni`<��:��0+0���v����3�� +E�����+E3����;�7u;��+E3������"�0���d -��3���` �7u;`��7�.30������+ #��7a[������<3030�<��+j ����%`<���6�C��+0��( :.+E�����!��(���3����0+j+0:�`��d -+F\ !$=hB �

1.2.2 Compiler�Z �/*�����Z ��.�0������ -� >a- -��� �p.�� 3�� 3���� `����6�.:�30�<� ��� ����<`<30��������`DNL����� ��+":�+0:. -�~� �.��3!������:����n�b,�.� 8G, � ���/# �9*-,.#;@$:u,$@c� `����6�.:;3��<� `� -��:���(��<��+E3� ��.( (�������`<30�����+ a[�<�E�����������3���a[�% -��(��*:���30�(���hi�7������3XN������H�. �3�:;�� -CL ��.��:. -���<+���=���~3������D30�.�R���������� -��+ ���Z�d -`��������BL -����:. -���R��+X���DaF�L �p.��R ��3��<���. �30��a[� #;+0����`��R3��. �3,&,��:��(

��� ��:������ 3�� p.�0�> �/ 3���� �.�0������ -� ����3�� � ������ �*:�� pC�<���NR�.�0������3���a[� ����+E30��:�`<30������+63��. �3�3����`����6�.:;3��<� `� -�z:���(��<��+E3� ��.(y�=bc����+ ��+ ���/[��3��������.� �[��:��DN���������( 3�� `��������'a[�<�DNL��� (��������<� p��3���������� �.�7�X&%�.��` � � :�+0`<���+,3�� ���'a[� ��������(��<�c3�� ���<3X30� �[��:;�X�.L �`����

���������'a[�<� # �d �` ������� L ��.��:. -���<+Ra- ��0� `�����+0��(��<�� �p.��ZpC�<3k&,���<� (.�~hi�<���<��3"`����6�.:�30�<��+��Db,� M3��+ #v��� ����(��<� 30� :�+0� ���������� -�e&%���~303���� NL���D������+E�C��`<��T.`�`����6�.:�30�<� S ��� Z(���hi�<�0����3 `���� ��.:;3��<� � #i����� T.�0+E3 � �+V3��3E�� -��+0L �30�!3���� �.�0������ -� N������ 3���� �d -`�������� L -����:. -��� ��N2S 3���3�����d -`�������� � -����: ���� ��N �%�gbc����+D�.�0�*`���+E+ #,`> -���<( (I!$=)���/#;@ #,`> ��wpi��a[�<�0� `<:.� pC�<�0+0����� ��N%3�����d -`��������dL -����:. -����+D��NVS ��.( �| �����+E:�p.+E3� -��3��� -��� (���h �<������3>�4SV�+0� #j�C���E3������ `� -� ������ pC�(������"&V�~3��Z (��<3� -�����( /*�.�'&V���(����"��N�30�.�R�C��`<:.��L �����30����+ ��N�3���� ����a[��~a[��(Z`����6�.:;3��<��+<� �g:;3X30�.��+3k�*�C�X��N /F���'&V��<(.���,��+2����3 �������<�� -��� &,���030��&V������ 3�� -` �*:������ #� -+j��32��+230����( 3��"�����Xa[�<�0� +E�C�<`���T.``����6�.:;3��<�>� SV+ +0�����4 -+ 3�����+ `<���6� :;3��7� ��+ ���<�.L -`<��( p�� -����3����<� ����� #2�d -rG���!� M�03�+ ��Nc+0:�` �`����6�.:;3��<� �_+E�C��`<��T.`R/*���M&%���(����BpC��`������B&,���03�����<+0+% ��.( �. >a[� 3�� pi� ���7p :���~3,N������ +E`<�� �3�`��y�

Page 13: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

���� � � � � ��� 6��� � �3�����?� ��� � �3��� � �>8

// Program: power8.C // Raise a number to the power eight.

#include <iostream>

int main() { // input std::cout << "Compute a^8 for a =? "; int a; std::cin >> a;

// computation int b = a * a; b = b * b;

// Output b * b, i.e., a^8 std::cout << a << "^8 = " << b * b << "\n"; return 0; }

Sourcecode Executable

MZ ÿÿ@ U‰å]é×È U‰åƒì ƒä𸠉Eô‹Eôè'Ë è‚×ÇD 0C Ç $ÀeC è.ë Eü‰D$ Ç $ eC èKàD$ 0 Ç $ÀeC è ë Eø‰D$ Ç $ eC è$à ÇD$ <0 Ç $ÀeC èàê ‰Â‹Eü‰D$ ‰ $è ÇD$ H0C ‰ $è¿ê ‰Â‹Eø‰D$ ‰ $èn ÇD$ N0C ‰ $è ê ‰Â‹EøEü‰D$ ‰ $èJ ÇD$ S0C ‰ $èzê ÇD$ óB ‰ $èZúà U‰åƒì } ÿÿ u ƒ} u Ç $ `C èÑ } ÿÿ u ƒ} u Ç $ `C èF ÉÃU‰åƒì ÇD$ ÿÿ Ç $ è¨ÿÿÿÉÃU‰åƒì ÇD$ ÿÿ Ç $ ÿÿÉà U‰åSƒì ‹] ‹M Ç ˚JC ‹@ôŠ p9C ˆ h ‹ R S Rè Ö Æƒ ƒÄ ‹]ü‰ì]à ´& ¼' U‰åSƒì ‹] ‹M Ç ˚JC ‹ @ôŠ p9C ˆ h ‹ P S RèÏÕ Æƒ ƒÄ ‹]ü‰ì]à ´& ¼' U‰åƒì ‹U Ç ˚JC RèûY ƒÄ ‰ì]à t& U‰åƒì ‹U Ç ˚JC RèÛY ƒÄ ‰ì]à t& U‰åSƒì ‹] Ç ˚JC SèºY ƒÄ ‰] ‹]ü‰ì]éyX ´& U‰å‹E ƒÀ ]à t& U‰åWVSƒì<ŠM ˆMÇÇEàp @ ÇEäP C Eô‰EèÇEì @ ‰eð Uȃì RèWÉ ƒÄ }Ç •Â âÿ ‰UÀÿMÀ eÀ }Ç „

Compiler

Figure 1: � ��!$89(0��* �>= ��=�,.#0��* ,5�<� �X�V�;�F��!$:N=>���h��!�B � �/#0�<!�,.#Q�'&`����:;�J,cS)* � (0=>!�@=�,.8�W

b��Z����(�:�`��63�����+":��.(���+E���� �p.�� ����3� ��.�����������3"��N `����6�.:;3��<��+! -��( ���������� -��+ #� -��( 3�� -���M&:�+�3�� &X����3�� �.�0������ -��+6�������+E+d����������3���a[� L -����:. -��� #be_������� � ��7a[�� gD���������� ���������� L ��.��:. -���<+�. �a[�VpC�����d(��<a[������i��(y�jb,����+0�R ��0�B+E3� -��(. ���(�� � �<(�L -����:. -����+j30� M3 NL�����O "/*����(d��NC`����6����������+0�pC�<3k&,���<��. �30:��� - � -����: �����+ -��(��d -`��������cL -����:. -�����v^_��(�����(�#�30�.�%:.+E�V��Ni3����%&,����( �E`����6�����������+0� � ��+yrs:�+E3��~T �<( pC��`� -:�+0�X3����<�0�% ��0�,3k&,�"`���� ! ��`<3������R���[ -�+ � AR� 3����X�����c� ��.(�#�&,� &,��:��( ��~/[�3�� &%���~3��B�.�0������ -��+ ���� D� -����: ����V3��. �3,��+X -+,`����+0�R3��D� M3�:;�� -CL -����:. -���R -+,�C��+0+E��p.����2AB��3������3����<�"�. -��( #C&,�D�. >a[� 3�� �d �/[� 3����D`<���6� :;3��7��+R:.��(��<��+G3� -��(=3���� ���������� -���������6� -����: ���� -+&,���/z�3�����+ 3� �+E/d��+,��p*a*����:�+0��6�D:�`�� �> �+0���<�c��NC3����B���������� -��������� L -����:. -���V��+,`����+0�V3��D�d -`��.���.�L -����:. -�������� M3j(�����+ ��3 ���> -� �G3��R�d �/[� 3����,`����6�.:;3��<��+v:���(��<��+E3� ��.( 3���� ���������� -���������XL -����:. -��� ���

^_�63����%�<�.(�#* -���D���������� -�t�. -+j3�� pC�%30�� -��+0L �3��<( ����3��!�d -`��������,L -����:. -�����vb,���%�����*`<��+0+g��Ni30�.��+30�� ��.+EL �3���������+V`> -����( ��!$89(0��*-,5���J!$# � X�M& �[��: &V���y������p �p.��� -+E/ � �G�����<��� ��+c3���� pC�����<T�3B��N3�����+ &%�.����V�.�0������ -���������!� -����: ����V`�����`��<��3 � ^_�����0(.�7�c30� (�� 3����R3E�� -��+0L �30�����d^2+G3����i�. �a[�B3��/F���'&) -�.3�����+0�R`����6�.:;3��<� �_+E�C��`<��T.`V(��<3� -���+ #*(����0y 3,^k� � �X������3>� ^_Ny�[��: &,��:��(d�. >a[�V30� 3E�� -��+0L �30�3����X���������� -�t�[��:;��+E���N � b,�.�X/[�<� ��+ ��x2��:� ����c����3 +0:;���C��+0��(630�"30�� ��.+EL �3��c��32�[��:��0+0���N �2^_��+E3��> �( #��<3X ���������� -�\(��D��3cNL���X�[��:y�g{*:.`�� ���������� -�O��+,�0��NL�<�0���<(Z3�� �+% ��!$89(0��* �>= z.�~3c3E�� -��+0L �30��+, ����a[��� ���������� �� ��� ���������� -��������� L -����:. -��� #.3���� ��!$:N=>���h��!�B � #n����3��d ���������� -� ��� �d -`��.���.�L -����:. -��� #�3���� �'& ���>:4�J,cS)* � �,{*��� ����:;��� � NL���B -������:�+E30�� �3������y�^_� +E:.���d M�0� � b,��� p.��� pi�����<T�3���NXe �.����� �_��<a[��-g ���������� -�������.� L ��.��:. -���<+6��+63��. �3630�.�7�

�p.+E30�� -`<3 N������e3�����`> M� Mp �����3����<+"��Nc+E�C��`<��T.`�`����6�.:�30�<��+�� Kv�������� -��+"&%����3E3���� ��� �.����� �_��<a[��L -����:. -���B`> �� pC�B��:������� -�i/*����(.+,��Nn`����6�.:;3��<��+ #F -+X����.�D -+c `����6�.����7� NL���X30�.�RL ��.��:. -���%��+ �a� ���L �p.��B����30�.�R� ��03���`�:�L ��,`����6�.:;3��<�>�

1.2.3 Computer

^_Ng�[��: ��0� ����3 ����3��<�0��+E3���(=���=&%�0��3������d`����6�.����<�0+ #C��3"��+"����3"����`���+0+0 ��0�=30�Z:��.(��<�0+E3� -��( ���=(.���3� -��g���M&O Z`����6�.:�30�<�!&,���0/*+�� �g:;3 3����<��� �����+0����� p �+0��` ��������`��~� ���+!pC��������( 3�����(���+0����� ��N����+E3g`����6�.:�30�<��+ 3��. �3 ,.=>� ���6�C���03� ���3 3�� :���(��<��+E3� ��.(y�2b,�.�<+0�V��������`����.���+2NL����� 30�.� p�!$#�� �>:4H

Page 14: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��? ������� ��������� � � � ����� � ��� ���

8�,.#I# ,.=>� ���/�<��� ��:N=>� # -��( 3����<� �������6�C���03� -��3 # +0����`�� -�����+E3 -� ���������� ���������� L ��.��:. -���<+ ����R3� -���������(d3�� 30�.�Ra[��� X��:��d -��� ���`�����3���`73�:;�����SV��� `����6�.:;3��<�y&%��3��Ra[��� X��:��d -���" ���`�����3���`<30:��0�j�. -+ =�,.#�B !$8 , �h��� ����82��82!$= D e �XS � #

���"+0���6�.��Z�d ���� ���������0� g�#C -��( ���>#0��=h,5*_(0=>!���� �>�h�/#;@ :N#I��� ek5,K � #C���!+0���6� ~�������*`<��+0+0���'g �b,�.��d -��� ���������E� +E3����0��+D30�.�d���������� -� 3�� pC�d��:���#jp.:;3 ��+0� ( M3� Z3����d���������� -� ��� �*:����0��+ -+D���;�.:�3 #j ��.( (. �3� Z3�������������� -�e�����*(�:�`���+ -+D��:�3E� :;3>� bc���d�.�0�*`���+E+0��� ��+ 30�.� �Gp��� -��� � ��N3���� `����6�.:;3��<� � ��3d�7u;�<`�:;3���+d3���� ���������� -� #,���> -������� 3��. �3d��3d`> M�0������+d��:;3�3���� +0� ��:.�<�.`<�=��N����+E30�0:.`73�������+ �.�0��+0`<���~pC��(�p��30�.�R���������� -�\�����d -`��.���.�B� -����: ������

Main memory.x2��:d`> -��3������;/6��NC3����B`����6�.:;3��<�>y@+g�d ��������������0� -+, !����.� �0�M& ��N +E&%��3�`�����+ #

�> -`��4��Nc3������ pC������� ����30�.�7� ��� ���D��h � QB:;������� �.�0������ -� �7uF��`�:;3�������#2+E&V��30` ����+D ��0� !.�����C��(y�S 3d -���43������ #j3����Z���������0� `�����3�����3 v�3����Z`�:;�0������3��C��+0��30������+ ��N -�X+E&V�~3�`��.�<+ v (��<T.�.�<+ 3����(0=>!�@=�,.8 �>�J,5�<� � b,�.�R���������� -�H+E3� M3��"`<���6� ��<3�����6(.�73��<����������+ &%� M3X�. ����C�<�.+c���7uF3�� 5 ���.`<�<� �3�:. -�~� #�&,� -�+0� `�����+0��(��<�D:�+0�<�D���;�.:;3D -��( ���������� -� ��:;30�.:�3D �+ � ��E3 ��Nc3��������������� -� +G3� �3�� #�<a[��� 3�����:���� 3����6`����0���<+E�C����(������ �E+E&V�~3�`��.�<+ � ��������3RpC����� 3����6:�+0�<� y + p.�� -����# ��� ��� ��������3���(� ��C�<���{*����`��c���*(��<���D`����6�.:;3��<��+2 ����,`> M� Mp ��c��N !.����� ���.�B+E�<a[�<�� -.+E&%��3�`�����+�e_8 � #�+0 >�cgv �3j30�.�,+� ����

3�������#�`<���.+E��`�:;3���a[�B+E&%��3�`�����+ ��0�R -`�`�����(��������� ������:;�C��(�����3�� 8��>82!$= DG��� *[*T� �gb,���%�C��+0��30������+g��N -�*+E&V��30` ����+v���D3����,`����F(��<T.�.� 3���� ��!$#0�<��#0� ��N.30�.� `<����z[���D������� �p.+E3E�� -`<3v3��7����+ #�3���� +E&%��3�`�����+ ����!`> -���<( S ���V� # �> -`�� ��N 3������ `> M� Mp ��!��Nv+E3����0�����6����� ��N 3���� �*:�� pC�<��+

{0, 1}�c^_� 3�����+%+E����+0� #

�[��: `> �� ����30�<�0�����<3 3���� `<����3�����3!��Ng ���<�����0� `����j �+! �p.���. ��0� �*:�� pC�<�B&%��3���#yNL���!�7u; -�6�.�� #8 �D(������~3�+�� � �" -�+E� +� ��d3��. �3c&,�"�. �a[�

32� p �~3X�d �` ������� #*���V

32�_p.��3c+E�*+E3���� �

1j �` � ���������0�D`����i��+ :���� �*:���~�6��(�����3���T.��(6p*�d�~3�+ ,cBcB.=>� ��� � xj��:d`> ��3������;/ ��Nn30�.�R �(.(;���<+0++0���6�.��� -+c30�.�R�C��+0�~3��������N 3���� ���������0��`��<�y����3���� ���+E3,��Nv ��C���������0��`<����+��b��D��*��/d:;��p.��3,a- -�:���+ #;���c3���!.��� p.��30+,&%��3������ +E�C��`<��T.`"���������E�6`���� #*3���� `����C�. -+,3�� pC�

, ���h� �>���'B 3��;����:������~3�+% �(.(;���<+0+��jbc�����;/d��Nv ����pC��3X ����O&%��3��Z8 � T.�����<��+,3��. �3X�[��:�`> -��3��<�i3�����'a[�R30� ���������0�6`����y�*:�� pC�<�"�'o*�bc��� 30�<��� =�,.#�B !$8 , ���h� �>� �0��NL�<��+ 3��Z �.���F+E��`> - �������C�<�03k�=��N 3����6`����6�.:;3��<� y +"���������E� �

3�����3���������3 3� �/[��+63�� �`�`���+0+ =`<��� e 3�� �E���Ma[�3�� ��3�+ p �~3�+ �5gD��+ 3���� +� -��� NL��� -�c`�����+�zV���� ��03���`�:�L �� #i�~3"(�����+ # !.� (��<�C����( ��� 3���� �(.(;���<+0+"��N23���� `����_�"� ����� �[��:=3������;/ ��� 3��<����+R��N3����X�0��pC��3j ���� �� ������� #���32pC��`�������+2`���� ��j30� M3j�� ��.(����t -`�`<��+0+ `> ��.����32pC�X3� �/[����NL��� ���� -��3��<(n�^ 3 ��+g�.��3 �.�<`���+0+� M�0��3�� (���+0`�:�+0+ 30�.�X� ���F+0��`> - ���� -��+gp*� &V����`����� -��(���� -`�`<��+0+,��+g���� -�� � �<(+z�3�������6�C���E3� -��3g�C������3,���<�0�!��+ 3��. �3c�� -��(����H -`�`���+E+%N������<+%:�+XN��0���H3������;/*����� MpC��:;3c&%���<���R3�� +E30����� ( M3� ��3����\���Z���0(.�7�X3�� -`�`��<+0+%��3c� � `�������3���[�

Processor.x2��: `> -�Z3������;/��N 3����!`<���6� :;3��7� y@+,�����*`��<+0+0���R -+% DpC�>u 3��. �3%��+V �p.�� 3��6��[ -(� -��(

3������ �7uF��`�:;3��63���� �d �` �������DL -����:. -��� ���.+G30��:�`<3�������+ ��N, ���������� -����� ����(��<����b,���6�.�0�*`���+E+0����. -+D+0�����d���������0� `��<��+ ��N%��30+ �'&V��#g`� -����( ��������+E3��<��+ # -��(z��3D`> ��z30�� -��+0NL�7�6(. �3� N������ 3����`����6�.:;3��<� y +X�d ���� ���<�����0��3��6��30+c���<����+E3��<�0+ # ��.(Za*��`�� a[�<��+� *�cb,���"��������+E3��<�%`�����3��<��3�+B M��� -�+0�� ��03"��Ng3���� ���������� -�l+E3� �3��-� ����+E3 ���6�C���03� -��3��� #.3���� �����*`<��+0+0���!`> -� �C�<�0NL����� dT;u;��( +0�73 ��N+0���6�.�� ����+E30�0:.`73�������+ e_���/[� -(�(������6���B+0:;p�30�� �`<3������6��������+E3��<�B`<����3�����3�+ g�#i -��( 30�.��+V��+%&%�.�7��� 3����NL:���`<3������. -��~3s���Nv3����!&%�.����!���������� -� `�������+VN������ ��� 3���� ����(y�B1 a[�<� a[�<�0�Z`����6�.���`> �30��(Z -��(

Page 15: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

���� � � � � ��� 6��� � �3�����?� ��� � �3��� � �'I

:�+0��NL:�v���������� -��+B`> �� pC� �.:;3B3������<3����<� N������� �+0���6�.�� +E�<3 ��Nj&,��� � `�����+0��� ����+E30��:�`<3������.+V30� M33����R�.�0�*`���+E+0���V`> ��Z(��> -C&V��30�n�S\+0��������d����+E30��:�`<30����� -`<3�+D���/[�d �d �3������d �30��`> - NL:���`<3�������������a[��� 3����d`�:;�0������3 ���������� ��

+E3� M3�� # a� -���(4����+E30�0:.`73������z���<�.�7�� �3���+ ���<& -��(4&,��� � (��<T.����(4���7uF3 ���������� -� +E3� M3����wb,�.��+���6�.����<+"3��. �3 -��� +E� �*:�����`�� ��N%����+E30�0:.`73�������+ #2 -��(4��� � ��03���`<:.� �� 3����&%������6���������� -� �. -+D &,��� � (��<T.����( pC�<� �a*����� #;(��<�C����(������D����3����"���.�~3��L -.�.�0������ -�\+E3� �30���

1.2.4 Operating system

� �d�. �a[� +E�����z3��. �3 ��� ����(��<� 3�� &X����3��d Z���������� -� ��.( ��:��z�~3 #v�[��: T���+E3D�. �a[�d30� +E3� ��03D -���(���3���� #-3k�*�C�,��� 3���� ���������� -� #M3������ `> ��*3���� `����6�.����7��3��B30�� ��.+EL �3��g30�.� ���������� -� ����30�B�d -`��.���.�L -����:. -��� #� -��( T.�. -�~� 3����;3����%`<���6� :;3��7�j3��"�7u;�<`�:;3��V��3>� ^_�d -�;3�����+ �E+E3� ��030����� � # �E`� -������� �R -��(�G3���������� � #F�[��: ������ ��� 3���� `����6�.:;3��<� y + !>(I��=�,5���/#;@G��Dq�>�<�>8 ekA {cg�# D�.�0������ -� +E�6p �+0��`"30� M3�[��: �d �� ����3!�7a[��� �C�<��`<����a[� �~3! �+ ��.�0������ -� � K����.:�L ��"���C�<�� M3������d+E�F+E30����+! M���U\ �[#�B !$1�� #� #I�-& # n��[#I: & #� -��( l , ����� �

;���B�7u� ��6� �� #F&V���<3����<�X�[��: +E3� ��03X3����!��(���30���Xp��Z`����`�/*����� ��� +0����� ��`�����#.���%&%�.�73����<�%�[��:3k�*�C� `������d ��.( NL��� 30�.��+"+0�����7&V���<��� #y3���� ���i�<�� �3����.�+E�*+E3���� �d �/[��+!+E:��0� 3��. �3 3���� ��(���30������������� -� ��+D��[ -(���(4����3�� 3���� �d -���z���������0� #2 -��(z30� M3 3�����.�0�*`���+E+0���6+E3� ��03�+ �7u;��`<:�30�����=��3>�{*������� ����� #C&V����� �[��: +E3������6�[��:;� &%�0��303���� ���������� -� #�3��������C�<�� �3������Z+E�*+E3���� ����*`� �3���+ +G� �`��NL���X��3%��� 3����"�. ���( (���+E/ -��( -+0+E�*`��L M3���+c��3,&V��3��d3����RT ��"�. -���V�[��: �. �a[� �����'aF��(.�<(n�S `<���6� :;3��7�v&V��3�����:;3 ���C�<�� �3������R+E�F+G3����t��+ ���/[�c `� ��j&%��3�����:;3 3����0��+ #� -��( ����+E3 `����6�.:;3��<�0+

�[��:�`� -�p.:;�d`������V&%��3�� !������� ���.+G3� -���<(���i�<�� �3����.� +G�F+E3��<� �j^ 3,��+ ���6�C���03� ���323�� :���(��<��+E3� -��( #3�����:�����#[30� M3230�.�c���C�<�� �3������R+E�F+G3���� ��+2����3j�����7uF3E����`> �p.��!3�����(D3��"3����c`����6�.:;3��<� �n�[��:6`> -� 3� �/[��[��:;� �G������(��'&V+cKg5 �� -��(��������+E3� ��C��3c:��.(��<�Vmn���*:FuC�

1.2.5 Platform

b,�.� `����6�.:;3��<� # �~3�+ ���i�<�� �3����.� +E�F+G3���� ��.(430�.� `����6�.����<� ��0� 3������<30�.�7� ����NL�7�0����(w3�� -+D3����(+*-,5� K�!$= 8 ��� &%����`�� �[��: M���g&%�0��3������,�[��:����.�0������ -��+���bc��� ��(���30��� ��+ �.��3 � ��03v��NF3����g�.L M3�NL����� #+0����`�� ��3c(��*��+X����3X��� !.:�����`��R3���� pi���. >a*�����c��N�3����R�.�0������ -� �^_�� -�6��(.�� -F&,�����(�#�3����<���X��+ ���!������(6NL���2�[��: 3�� /F���'&�30�.�,�.L �3�NL���0� &V����� �[��:� M���c&X����3����.�

���������� -��+,���Z D������� � ��<a[��C���������� -��������� � -����: ������ �c��`> -�n3��. �3,3���� � � -�Z��+,3�� (�������[ �3��R3�����.L �3�NL���0� � +E�C�<`���T.`v -+E�i��`<3�+C3��,3����j`<���6� ����<�>� �g:;3n���"30�.�v���� -�&,�����(�#>3���� pi���. >a*�����y��NF ���������� ���d �� (.�7�C����( ��� 3���� �.L �3�NL����� � bc����+":�+0:. -��� �. ����C����+"&%����� �[��: ����6:�+0�����Z���"������*����������d -`���������� ���0������30��( NL�� �3�:;����+V��N 3���� ���������� ���������� L -����:. -������Z -��� ������� � ��7a[��C�.�0������ -���������L -����:. -����+ �. �a[�%+0:�`�����'&��_��<a[���NL�> �30:��0��+j3��"N -`������3� �3�� 30�.�,30�� ��.+EL �3������D����3�� ��� �>�J��#0� �d -`��.���.�L -����:. -�����

x2��:��X���[ -y+0����:��(Z ��&c ��F+,pC� 30� &%�0��3�� (+* ,5� KL!$= 8?H �/#�B �J(I��#�B �>#0� `��*(�� #�+0���.`<�!��3����<�0&%��+0� #;�~3�d ��6pC�Ba[�<�0�(�� � `�:��3 3��D���<3,�[��:;�c���������� -� 3�� ��:������� -����3����<�,`����6�.:;3��<� #F�7a[���Z��NC�[��:Z�. �a[� "`<���6� ����<�2NL���g3��. �3g`����6�.:;3��<�>�vb,����+g���6� �����+ 3��. �3g`��<�03� ����6NL�> �30:��0��+ +0����:��(6pC�% >a[����(.�<( #��<a[���3�����:�������3c��������3,+0����� -(;a� ���3� -���<��:.+,3��D:�+0�"3������H��� +E�C��`<��T.`R�.L M3�NL����� �

Page 16: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P ������� ��������� � � � ����� � ��� ���

1.2.6 Detailsf2��� X��:��d -���0y@+2��(��> !��Nn !`���������� ���������0�DNL��� 3����V���������� -� ,.#�B 3����B( M3� "+0�<����+ ��p*a*����:�+N������ 3���(. >�4y@+6�C������3���NBaF���<& #,p.:�3�30�.� �� �������<+E3�`����6�.:;3��<��+ ���/[���V���;�� -(��C:�+0��y@+��C8 (���(��0y 3&,���0/3��. �3%&c ��[� ^_� 3������y8 #.NL���B�7u; -�6�.�� #F3����"���������0�dNL���V3���� �.�0������ -�\&c -+V � :���`�� 3� ��C� #(���`���:;�.���(ZN��0���H3���� ���;�.:�3X -��( ��:�3E� :;3X(��<aF��`<� #. -��(�N������\3����!�d -������<�����0�[�SV� ����3��<���<+E3������%NL�� �3�:;���g��N�3����ja[��� c��:��d -��� ���`�����3��<`<3�:;���2��+n30� M3���3 -���M&%+y+0���N��_���*(���N��F���.�

���������� -��+<� bc����+0�! ����R�C���.:�L ��X -������� 3����"(���+0�����.�7��+X��N�`����6�.:�30�<� aF���0:.+E��+ #�NL���V�7u; -�6�.����bc���a[��� X��:��d -��� ���`�����3���`<30:��0�&%��3��z�~3�+ 3s&,� ��<a[���+ ��NV���<�����0�Ue_�d ���� ���<�����0� -��(

�����*`<��+0+0���V�0������+E3��7��+ g ��+V -� ��(.�� -�� � �<(����*(��� �gb,���!���> -���3k�d��*��/*+%�������R`����6�.���`� �3���(y����*(��<���`����6�.:;3��<��+ -�+0�B�. �a[�c �h, � �;� #[�������`> -���RpC�<������������%3��B3���� �d -��� ���������E� #Mp.:;32 -���'&V���.�X� :�`��N -+E30�<� -`�`<��+0+ 3��Z���<�����0� `�����+Xe �3"3���� ������`�� ��N, ������� ��L �pC���� �3�� -��( �7uF�C�<�.+E��a[�6(���+0�����Ng7�b,�.�X��(��> R��+230� M3gN���� �*:�����30�� �����<(.�<((. �3� " ��0�X+E30������(���� 30�.�X`> -`����X3��!+E�C����(�:;��3����,���������� -� ����.����j`� -`��.���.�%��+ `<�<�03� -���.~� X���*��(!3�������� #M��3��d M/[��+ ���NL�j��NF30�.� ���������� -�����7�y�������j(�� � `�:��3 �

�[��:=`� -� ��� ����.���7�B������ ��� 3����DN �`<3R3��. �3" -`�`���+E+ 3������!3��( M3� ���+B����(��<�C����(�����3 N������ &%�.�7���3����<� ��0�D+G3�������(y� ^_� N -`<3 #i30� ���<3R3���� NL:�� �C�7��NL�����d -��`�� pC�<�.�7T.3B30� M3R`> -`�������� `> �� ��h �<� #C3�������������� -�����7�B�. -+ 30���d �/[�D+0:;��� 30� M3"(. �3� M���6 -`<`���+0+0�<( ��� �h, � �;� H'��!.�;�>=��>#0� &c ��[� QB�������3�����+ #����'&,�<a[�<� #���� �*:�������+v+E����� `����6�.:�30�<� � +G�C��`���T.`2/F���M&%���(����, �pC��:;3 30�.� `� -`��.��#[/*���M&%���(���� &,�&,�<���!�����������. -�~�630�0�*����� 3��� �a[����(Zp��Z:�+0����� �.����� �_��<a[��y���������� -�������.� � -����: �����+��,my:.`�/*���� #;&,�`> -� ��N�3���� �����.���0� 3�����+R��+0+0:��D -��( e_+E:.`<`���+0+0NL:��~� gV������ ��� 3���� �:�30���d �3���`"`> -`���� �d -�. -���<������3pC�����.����h �<����(y�Rb,���<��� ��+R -�+0� 3����������73���`> - ���*(��� NL���R+0��� `> �����( �h, �>�;� Hh!�S)*d�/p��J!$:;� -��������~3�����+ #���6&%�.��` �d �� ����������3������7u*� ���`���3�~� (�����+ ����3g/*�.�'& 30�.�X� M�� -���<3��7��+g��Ni3����V`� -`��.�-�jSV���������3�����+&V����`�� ��0�6� �6`<������3 :.��(��<� 30�.��+!���*(��� #� ��0�?e_��� �`<�<�03� -��� +0����+0�)g!� � `�������3 NL��� -��� `�����`<�0�<3��`> -`����!+E� � ���^_�Z���> - � ���NL�" ����.���`> M3�������+ #F����� ��+0� �. -+c3����"�.������������������3��. �3c3����!(. �3� 3�� pi�"�����*`<��+0+0��(

����B3���� L ������B3�� T�3c����3�� 3����R`����6�.:;3��<� y + �d -���d���������E�[� AB�i�<�� �3����.� +E�*+E3�����+ `� -�Z -:;3����d M3����`> -����(��> -i&%��3���3�����+ p*��������`> -��� �7u*3�����(������ 30�.�R�d -�������������0� 30� 30�.�R�. ���( (���+E/i�2$%�'&,�<a[�<� #3���� ��1�, (c(0�/#;@ 3��. �3 3� M/[��+v� � -`�� &V����� � M��( (���+E/ (. �3� %3�� pi�X �`�`���+0+E��(d ���� 30�� ��.+ENL�<����( 30�"�d -������������0� ����`�:;��+g +0�<a[�<�0�%�C�<��NL���0�d -��`��c�i���. -�3k� #�� :�`�� &,����+E�X3��. -� �i�*���j`> -`����%:�+� -����� ^_�630�.��++0��30: M3�������#v3����<�����+ ��N�30���4��� &c �� ��N%����~�F����� ���z3����� �:�30���d �3���`6���<` �. -����+E��+!�����Ma*��(���(zp��3����%���i�<�� �3����.� +E�*+E3�����+ #� -��( 3����c�.�0������ -�����<�v��+j`��. -���<�.���<( 3��!`<�����X:;��&V�~3�� �[#�(0:;���_!$:;� (0:4�� � ���J�>#0� ���������� -��+��1 a[�<�D&%�.�<� &,�g�7uF3��<�.( 3����ga[��� X��:��d -��� M��`��.�~3���`<3�:;���j3��V����`��:�(��g+E�<a[�<�� -;� >�[�7��+ ��N;����� �

���0� #C3����<���D ��0� `����6�.:;3��<�0+V3��. �3 (.���0y 3BT.3 ���y������+G3"����3� Mp ~� #i3����<���D ���� (;,.=�,5*[* � * �h!$8X(0:4�<�>=)�&V�~3����������R3��. -� �����"������`���+0+E���>� �=���~3������ � �6`����<��3%���������� -��+,NL���B+0:�`�� `����6�.:;3��<�X��+X D3� -+G/����3�������~��(���hi�<�0����3,N������O���������� ����������"NL���,3����Ba[��� X�<:.�d ��.�d M��`��.�~3���`<3�:;���-�jb �D3� M/[� NL:��i -( �a- -��3� ���� ��Ny3����B� ��� -�������+0� #����������� -��+ �. �a[�R30�DpC�R(���`����6�i��+0��(d�d -�*:. -��� ����3�� ����(��<�C����(�����3� ��03�+ #i�> -`�� ��Nv&V����`�� ��+%3������ ��:�� p*� ����� ��Nv3���� �����*`<��+0+0����+<�B^_� �d ���� `> -+0��+ #i3�����+%��+B����3R M3 -�y +E30�� -������30NL���0&c ���(3� -+E/ # ��.( +E�C��`<�L -�� � ��( ���������� ���������� L -����:. -����+ �. �a[�"3��DpC� :.+E��(y�S ����`��<��3c+0:�`�`���+E+0NL:�� -~3��<���. �3��~a[�X3�� � ��� -����.`����6�.:�30�<��+ ��0� ���<3k&,���0/*+ ��N +E����������_������`���+0+E���

`����6�.:;3��<��+<��x2��:�`> �� �<a[��� `> -�C3�����+X `����6�.:�30�<�V M��`��.�~3���`<3�:;���-� ����. -��� #*3����<���! ����� :u,.#0��:N8��!$89(0:;�<�>=)� p -+0�<( ��� `����6�.��<30����4(���h �<������3 �.���F+0��`� -B�.�0����`����.���+63��. -��3���� a[��� X��:��d -��� ���`�����3��<`<3�:;�����

Page 17: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Chapter 2

Foundations

�'o

Page 18: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�># ������� ����� ���� �9��� �3� � � ���

2.1 A first C++ program�������X����� ���"!$#M(0=>� ���>#0�V�6, { =)�>�s��!$89(+* � �<� rbtXt (0=>!�@=�,.8 ,.#�BR�/#0��=�!�B.: �h� � �V�;�+E�*��3� �`<3���`> � ,.#�B +0���d ���3���`� - �<�>= 8?�f# ���h� �>�L,.= D��<!6:N#�B �>=)�>�J,.#�B ,5*[* ���V��(;,.=)�V�LW

$%�<��� ��+ ��:;�DT���+E3d5cW W ���������� �� � ^ 36 -+E/*+ NL���� �*:�� pC�<�a -+ �����.:;3 -��( ��:;30�.:�30+ ��30+

��������3�� �C�M&,�7�a8 � ^_N,�[��:4�. �a[� ���<a[�<� +0���<� 5XW W ���������� -�epC�<NL����� #g�7a[���z3�����+ +0�����03D�����

��������3V�����/ +0`> ��E� #n+E����`�� ��3R`�����3� -����+R ����3B��N2+E30�� ��.����� �����/F������+E�*�DpC���+B -��( &,���0(.+B3��. �3 M�������3BNL��:���( ��� �. �3�:;�� ��L -����:. -�����VAR� 3���� ��3����<�B�. -��(�# 3�����+%��+V���*��( �.�7&V+ �X -+B+0�����03R �+B��3B��+ #3�����+,���������� -�H -��0�> -(;�d`�����3� -����+X�d ����d���6�C���E3� -��3 NL�> �3�:;����+X��N 3���� 5XW W L -����:. -�����jAR��`�� &,��. �a[�B�����.�X3��;����:����d30�.�<� ����3�����+g+E��`<3�������#*30�.��+j���������� -� e -��(d�<a[�����3����<� #*p.�������<�j���������� -��+ g&,���0y 3c�����/d+0`> ��0�� -���F���������

�// Program: power8.C

�// Raise a number to the power eight.

�#include <iostream >

�int main()

�{

// input

std::cout << "Compute a^8 for a =? ";

���int a;

� �std::cin >> a;

���

���// computation

���int b = a * a; // b = a^2

���b = b * b; // b = a^4

���

� �// output b * b, i.e., a^8

��std::cout << a << "^8 = " << b * b << ".\n";

��return 0;

� �}

Program 1:(0=>!h@.� �c(I!$1b�>=��`W r

^_N��[��: `����6�.����B3�����+,���������� -�\���Z�[��:;�V`<���6� :;3��7�% ��.( 3������Z��:��Z3����!�7uF��`�:;3� �p.��RT.��R�.�0���(�:�`���( p*� 3���� `����6�.����<� #C�[��: T.�.( 30�.� NL�����'&V�����������D��� 3���� +E3� ��.(. ��0( ��:;30�.:�3��dbj�*�.��`> ���� #3���� +E3� -��(. ���(Z��:;30�.:;3c��+c �303� �` ����( 3�� +0�����B&%����(.�'&U�����[��:;�%`����6�.:�30�<�,+0`<���<���y�

Compute a^8 for a =?x2��: `> -� ���'&t����3��7� -�=����3��<���<� #n���@�;� � #n:.+E�����3����D/[�<�*pC�[ M��(y� SVN�30�<�"�����<+0+0����������������#

3���� ��:�3E� :;3c�����[��:;�V+E`<�������Z�0�> -(�+% �+XNL�����M&%+��

Compute a^8 for a =? 2

2^8 = 256.

Page 19: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� �>q

�g��NL�����R(���+0`�:�+0+E�����!3����V���������� -�power8.C

���d(��<3� ��� #[��<3 :�+ ��� �'a[�<�,��3 ����`�� ��:���`�/F��[� b,����������+g+E3� ��030����� &V��3���3k&,� +0L -+E�.�<+

// ���� ��!$8Y82�>#0�V� zF3����<�d(��*`�:�������3 3����V���������� -�O+E:.`��3��. �3

��3X`> -�ZpC�"�> -+0����:.��(��<��+G3��*��(�p*�� Ye_��:��d -�Ng �0�> -(��<�>� my����� ? ������+0����3�+B -� �[# � *d:uB � H B.�/=>�h� ���/p�� z��� 3�����+X`> -+0� # ��3B����(���`> �30��+X3��. �3X3����!���������� -� :.+E��+V3���� ���;�.:;3��-��:;30�.:�3X���p��� M�0������+E30���> �� �Xb,���8�,.�[#FK�:N# � ���J!$# &V����`��6��+ 3����%���> ��E3 ��NC�<a[�<�E�5XW W �.�0������ -�t+E� -��+ ������cP � ��]F� bc����+jNL:��.`73��������+ `> �����( p*�=3�������i�<�� �3����.��+E�F+E30��� &V����� 3����6�.�0������ -�e��+ +G3� ��03��<(+zj��3 ����(�+ &V��30� =�� ��:4= #�>�J,5�<�>8��>#0� ��� ������d�>qF� b,��� a- -�:��

0��+R���<3�:;������( 3�� 3���� ���C�<�� �30�����+G�F+E3��<� #n&%�.��` � p*� `���� �

a[����3������Z+0����� ��+ 3��. �3c3���� ���������� ��\30�<�������. �3��<(+E:.`<`���+0+0NL:��~�[�bc��� �d -���ZNL:��.`73������ ��+B(���aF��(.�<( ����3��630���0��� � ��03�+�� �����+E3 #i��� ������ # � ���!30�.� �����.:;3V��:��DpC�7�

��+V���� -(=���y� my����� #��:;30�.:;3�+R 6����+0+0 -��� 3���3���� :.+E�<�R3��. �3B3�����+V���<�R&V����`�� /*����( ��N2���;�.:;3V3�������������� -�H�7u*�C��`<3�+<�,^_� ������ q6 pw,.= � ,cS)* �

a��+%(���`�L M����(�&%�.��` �Z -`<3�+% -+V � � -`��������(��<�,3��6+G3������

3���� ���;� :;3>�2b,��� /[�<��&,����(int

����(���`> �30��+ 3��. �3a��+X -�Z����3������<�>�

bc�����d��� ������!�>8 � �'IB3����V -`73�:. - `<���6� :;3� M3������ 3� �/[��+2� � -`���� ^_������.�"��? #� "���<&�a� ��0�L �p.��b��+

(���`�L M����( &%�.��` �6 -`<3�+g -+g B�.L -`��<�.���(.�7�j3��"+E3������c3����c�0��+0:��3j��N 3����%`����6�.:;3� �30�����y��b,���ca- ����L Mp ��b��+ ���.�~3��L -�� � ��(Z3��d3����D������(�:.`73 a * a

�Dmy������'Id`����6�.:;3���+V30�.� �����*(�:�`<3b * b

#y3��. �3 ��+ #a4

-��(Z+E30������+,3�����+c�0��+0:��3X -�[ -��� ���b�

bc��� 3�������( � ��032N�������������B�'o � �>#V�����'aF��(���+v3���� ���������� -� ��:;30�.:;3>�vK� ��032��N �~3 ��+v3����,������(�:.`73b * b

#;3��. �3X��+ #a8 �

Syntax and semantics.^_����0(.�7� 3�� :���(.�7��+E3� -��(�3����V���������� -�

power8.C����(.�73� -�� #� -��(d�������

���6�C���E3� -��30�� #;3��&X����3��"�.�0������ -��+%�[��:;��+0�<�NgL M3��<� # �[��: ������( 30�/*�.�'& 3���� ��:����+ -`<`�����(������63��&V����`��d���������� -��+ M���B&%����3E3����y� bc����+E� ��:���<+ NL�����O3���� �hDq#0�J,�& ��N 5XW W ��x2��: NL:;�03����<�c������(3��/F���'&w���M& 3�� ����3��<�0�����<3j V���������� -� e �G&V�. �3 (��*��+ 3���� ���������� -��(���� �5g�#[ -��( 3�����+ ��+ (��<3��<�0��������(p*��3���� ���>8G,.#0���J� � ��N%5cW"W �R1 a[�<�= ���������� �� 3��. �3B��+%&,�����_NL��������( �`�`�����(������ 3���3���� 5cW W+E�*��3� Mu��d ���pC� �[#Ipw,5*d�"B N��0��� +E���d -��30��`> -i�C������3c��N�aF���<& �jS pw,5*d�"B �.�0������ -�\��+%����� 3��. �3c��++E�*��3� -`73���`> -��� ,.#�B +E���d -��30��`> -�~� `����E����`<3>�^ 3 y@+X3���� +� -��� &V��3���� M3�:;�� -nL -����:. -��� � ���� ����d �� 3�����+X�[��: &V�. �3%+0����30����`���+R �����# p.:�3X3����

����3��<�0�����<3� �3������w��N +0�<��3�����`�� e_����� M�03���`�:�L M� # &V���<3����<���3�d �/[��+d+0�<�.+E�= �3 -� g ��� ��:.�~����+ `�����`��<��3X��N ���> -�������;����.�<�U =���������� -� ��+�����a- -���(�# 3���� `����6�.����<� �d >�4��:�3E� :;3 -���<�0�0��� ���<+0+� -��� #X -��( 30�.��+

&V���%(��<T.����3���~�4�. ����C���w&V������3����Z�.�0������ -� `�����3� -����+�+E�*��3� Mu��7�0������+�� S ���������� -� 3��. �36��++0���d ���3���`� -��� ����a� ����( �d �� `<���6� ���� &V��3�����:;3 �7�0������+ # p.:;3 &,�d ��0�6����3 -���'&,��( 3�� �d M/[�6 -��� -+0+E:.�6��3������.+y MpC��:;3���30+ypi���. >a*����� z-30�.� ���������� -� �h!$:;*-B ��:��!T.��� #-NL�����7u� -�6�.��v��N�3����g+E���d -��30��`> -�<�0�0���,���$��:���+E3������d�. -+,��� `�����+0� �*:�����`��<+X��� !� ��03���`<:.� ��g�.L �30NL����� �vAB����3����<� �.L M3�NL������+ #[3�������������� -� �d �� pC���. �a[��+E3E�� -�������� #j��� `<�� -+0�y�41va[���w���z3�����+0 -����� � �3�NL����� #2��3D��������3 &,���E/+0�����<30������+ #.p :;3 N -�� �3 ��3����<�R3�������+��R� �D+� �� 3��. �3B3���� ���������� -��+>y +%pC���. �aF�����R��+ :4#�B � { # �'B �5 ��> ���~� #F�����"+0����:��( �a[����(&%���~3������ �.�0������ -��+ 3��. �3c�7uF�.�~p �~3X:���(��<T.����(�pC���. �aF�����>�{*�����<3������<+ #v�<a[���4a- -���( ���������� -��+!pi���. >a[� (���hi�<�0����3�~� ���z(���hi�7������3D�.L �3�NL���0��+�� b,����+ ��+

`> -����( �/8X(+* �>8��>#0�J,5���J!$# B � { # �hB pC���. �aF�������=^_� `�����3E�� -+E3 3�� :��.(��<T.����( pC���. �aF����� # �[��: `> -�����~� ���) &,�<��� (��<T.����(U ��.(U:�+0:. -��� ��8�,5*[* +0�<3 ��N �C��+E+0��p.�� pC���. �aF������+<�\^_�6� ���������3� �3������(��<T.����(zpC���. �aF����� +E�.��:��(z -�+0� pC� �a[����(���(�#jp.:;3 +E�����<3�������+ # 30�.��+D��+ rs:�+E3 �.��3 �C��+E+0��p.���� ^_�3�����+,`> -+E� #.30�.�R���������� -�����7� �. -+c30� �d �/[�R+0:;���R3��. �3c3���� ���������� ��\&,���E/F+c:.��(��<� ,5*/* 3���� ����[ -

Page 20: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��] ������� ����� ���� �9��� �3� � � ���

pC���. �aF������+,����a*��+0��������(�p��d3����!+0���d ���3���`<+��bc��� +E�*��3� 'u ��N 5cW W���+ +G�C��`���T.��( NL�����d ���� ���D %�d �3������d M3���`> --L -����:. -����� b,��� (���+0`<�0����3������

��NC3����R+0���d -��3���`�+j��+ ���+0+ +G30����`<3>zF��3 �� M3����<� ����+0�<�Dp.���+ 30�.�V30�7uF3,��Nn L �& #* -��(� �+ +0:�` � ��3 +0:;h �<��+N������ ������+0+0������+c -��(Z�C��+0+E��p.��R����+0����3��<�0�����<3� �3�������+��jbc���"� �6`��L � L �&x��NX5XW W `��'a[�<�����.� pC��3��+E�*��3� Mu� -��(Z+E���d -��30��`�+ #F��+c3����"^k{;A ��^ 1j5 +E3� -��(. ���( ��?[#�# � N������ �>q�q�#F����.����B+0:�`�� NL�����d - +G�C��`���T.`> M3������d��+,����(���+E�C����+� Mp ��se_��3����<�0&%��+0� #����M&)+0����:��( `����6�.����<�

/F���'& &V���<30�.�7� �[��:;�R���������� -� 30�7uF3 ��+R -`73�:. -���Z d5XW W|���������� -� #C ��.( &V�. �3R�~3R��+B+0:;���C��+0��(3�� (���� g�#,��36��+�����3�+E:.�~3� �p.��NL���d��> ���������� 5cW"W �)b,���0��:.������:;3 30�.��+ pC�*��/ # &,�Z�7uF�.L ����43����������<a� ���3 +E�F��3� -`<3���`> - -��( +0���d ���3���`� -V3��<����+d��� � M3�:;�� -RL -����:. -��� -��( p�� �7u; -�6�.���� ;���3����Z+� M/[�Z��NV���> -(. �p.�����3k� #2&,��&%��� ��N�3��<������3 +E30����`73��� (.��+E3�������:���+0� pC�<3k&,����� +E�*��3� �`<3���`> �% -��(+0���d ���3���`� -i3��<����+ �2+E����� 3��7����+c ����!����+G3,� M3�:;�� -���d����30����(�:.`<��(Z -+c�. �aF����� pi��3��Z+E�*��3� -`73���`> - -��(Z+0�<�d -��3���`> -C -+G�C��`<3�+ # ��.(���3c(.�7�C����(�+%����3���� `�����30�7uF3c&V����`��Z �+E�C��`<3X��+,������7a� -��3>�

2.1.1 Comments and layout1va[�<�0� ���*�*(���������� -�\`�����3� -����+c`�����������30+ #*NL���%�7u� -�6�.��

// Program : power8.C

// Raise a number to the power 8.

Sw`�����������3v+E3� ��E3�+v&V��3�� 3k&,�"+EL -+0����+// -��( `<����3�����:���+ :.��3���F3����,����(6��N.3����c�������� 5 ����������3�+

(��6����3X�����'aF��(.�" -����NL:���`<3������. -���3k� #F���> -������� 3��. �3c3����"���������� -�O&,��:��(Z(�� �7u� -`73���d3����!+� ����&V�~3�����:�3c3������ �,����� ��+V ���������� -�H&V��3�����:;3X`�����������30+cp -(�# 30�.�<� � � � (�� # !.� ������&%����30����������� -��+ NL���j3����%`����6�.����7�v3��!30�� ��.+EL �3�� 3������|����3��"�7u;�<`�:;3� �p.���+ #[p.:;3g&,�V ��+0�"&X����3�� 3������|NL�����3����<�c�C�����.��fe_����`��:.(������ ��:;��+0��~a[��+ g 3�� ���� -(�#.����(���N�� #*`����E����`<3%���%�7u*3�����(�3������ �����3�����:;3 `�����������3�+ #y3����6L �3E3��<� 3� -+E/*+!pC��`������Da[�<�0� 30��(�����:�+"&V����� 30�.� �.�0������ -� ��+ ����3

`����6�.��<30���� 30����a*�L -_� b ��:�+E3 :�+ � 1 a[��� �[��: &%���2����3 pC�d �p.�� 3�� :���(��<��+E3� ��.( �[��:;�D�M&%� �.�0������� -��+c -N�30�<�V `���:;�.��R��N�&,���</*+ #;&V��30�.��:;3,`��������<��3�+�� b,���<���"��+,�.� �>�J,.#�Bc,.=�B &c >���N�&X����3����.�`�����������3�+ #[p.:�3 &,�B&%��� NL�����M& +0�����V`���������� �_+0����+0�V��:���(�������.�<+��2AR���R��Ny3������O��+ 3��. �3,�<a[�7�0����������� -�Xv �7a[��� ��NX��3 ��+ a[�7�0�z+E���6�.��'v +0����:��( +E3� ��03 &V��30� �������� �����0���������+ ��NX`<����������3�+3��. �3 ���<��3������ 3����V�.�0������ -�Ry@+2�. -���V ��.(+� ��6&%� M3 ��3 (�����+��2^_� ��:;� `� -+0� #*30�.�R MpC�Ma[�V3k&,� ����.�<+NL:����d+0: � `����SV����3����<�Z/[�<� NL�> �3�:;��� ��N ���> -(. �p.�� �.�0������ -� ��+Z��3�+ L ��[��:�3>z `�����+0��(��<�Z3����=a[�7��+0�����)��N

power8.C+E�.�'&V� ��� K �������� -� �*�x�=� �. �a[� �������'a[��(�`�����������30+ #c -��( -� �E:��.����`<��+0+� ��E� �

L ��[��:;3c�����������3�+,���/[� +E� -`���+ #.������Rp����� �/F+ #;p.L -�;/d����.�<+ #� -��(Z����(�����3� �3�������+��

�#include <iostream >

�int main(){std::cout <<"Compute a^8 for a =? ";

�int a;std::cin >>a;int b=a*a;b=b*b;std::cout <<

�a<<"^8 = "<<b*b<<".\n";return 0;}

Program 2:(0=>!�@.� �c(I!$1b�>=�� ��!$#�B �>#0���'BcW r

bc���D`����6�.����<�%��+R`����6�.��<3��<��Z���������� ���3R �pi��:�3B30�.�<+0� `��. -������+ #Cp.:;3" ��i�<��+0��� ���> -(�������3�������������� -�|&V����T.��(d30�.��+ `�����(.�<�.+E��(a[�7��+0����� �*:���3��%(.���6`�:��3 30� :.��(��<��+G3� -��(y�jb,���V�.:��E�C��+0�B��Nn

Page 21: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� �F�

���*��( L ��[��:�3V��+V3���aF��+E: ��� � � 3���� �.�0������ -� +E3E��:�`<3�:;����� b,�.��+BNL���R�7u� -�6�.��!���> -��+X3��. �3R�������`> -p.��*`�/*+ ��Ny30�.�V���������� -� +0����:��(�pC�B+0�<� ��� �3���(dp*��p.L -�;/ �������+ #���� 3��. �3 �����B������V��Ny+0��:;��`��<`��*(��+0����:��(�pC�%���<+E�C����+0��p.��VNL���,������ �����V3��������;� � #�B �>#0�J,5���J!$# #;���/[�

power8.C�. -+ ��3gpi�<3k&,�����d3����

� -��� ��Nc`�:;���� p��� �`���+ #2��+D -����3����<� ����(���+E�C�<�.+0 �p.�� ���������<(.������3 ��Nc���*��( � >�[��:;3 #2 -~3�����:.��� �[��:&V���i������L �3��7�cpi�! �p.��B3�� NL:���� ���������`��� �3��R3�����+��bj�*�.��`� -��� #v`����L �pC���� M3���a[�6+0��N�3k&c ��0�d������rs��`<30+D�. �a[�L ��[��:�3 ��:���(����������+ # �d �/F���.��+0:;���30� M3

�<a[�<�E�*pC��(������w3���� ������rG�<`<3`> -� �� -+0����z���> -( �7a[�<�0�*pi�*(;�w���+0��y@+`��*(���� S 3d3���� ��<a[��R��NR3����+0���6�.�� �.�0������ -��+ (���+0`�:�+0+E��(4��� 3�����+ pC�*��/ #g+0:�`��4NL�����d - ��:���(����������+ ��������3D�.�<`���+0+� M�0�;z,&,�+0���6�.�� -(��.�7���%3��"+E3� -��(. ���(���:���(�������.�<+ 30� M3g�. �a[�X�����'a[����3��!&,���0/D&,������� �.�� -`<3���`<� #* ��.(630� M3 ����RpC�����.�D:�+0��( ���� -�����+E3c ������3����<�cpC�*��/d��� 5cW W� �+X&,��� �

2.1.2 Include directives1va[�<�0� :.+E��NL:� ���������� -�\`�����3� -����+,�����"���X�������

includeB.�[=>���>���/p�� � # +E:.`�� �+

#include <iostream >

�%+0:. -��� #v3�����+0�Z M�.�i�> �� �3 3���� a[�<�0� pC�������.������� ��NX30�.����������� -� �#include

(����0��`<3���a[�<+ ��0�������(���( +E����`�� #C��� 5XW W�#y�d -��� ���6�C���E3� -��3%NL�> �3�:;���<+" M��� �.��3R� ��03R��N23���� `������ L -����:. -�����"^_� �+E3��� -(�#�3����<� ��0�6���6�.���������3���( ��� 3����6+0���_`> -����( �>�J,.#�Bc,.=�B]*d�"S =h,.= D &%�.��` � ��+!� ��03 ��N �<a[�7�0�5cW"W ���6�.������<��3� �30�����y� S *d�"S =h,.= D ��+D �������`> - :�����3D:�+0��(z3�� ������:;�4`��7�03� -���zNL:.��`<30�����. -���3k� -��( 30� �����'aF��(.�R��3 30� 30�.�R:�+0�<�X��� +0:�`�`�����`<3cNL����� �2^_�N -`<3 #;3����B+E3� -��( M��(���~p.�� ��0�6`<���.+E��+E3�+,��N+0�<a[�7�� -n���p��� �������+ �����!��N &%����`�����+,3����"�����.:;3��-��:;30�.:;3,���p��� ��E�[�S)���p��� ��0� ������+0����3�+c��3�+ NL:���`<3������. -��~3s� 3�� 3����R:.+E�<�%���3����RNL�����\��Nn���.�R���c+0�<a[�7�� - �;�h,cB �>=)� �

12 -`�� +0:�`��=���> �(.�7�R`�����3� �����+V����NL�����d �3�������3��. �3B��+%�.�<��(���( p��Z3���� `����6�.����<���V^_� ����(��<�B3��d:�+0� �`��7�03� -��� NL�> M3�:;����N������ ���~p.�� ��0� #��������. -+ 3�� ���.`<�:�(.�D3�����`����0���<+E�C����(������ �.�� -(��<� ����3��Z3�������������� -� p*� ���> -��+D��NR -�

#include(�������`73���a[��� ^_� ��:;� `> -+0� # &,�&c -��3D3�� :�+0�����;� :;3 -��(

��:;30�.:;32&%����`��� ����ke_�d ��*pC�,+0:;�0������+0�������� g�����32� ��032��N 3����c`������%� -����: ������vb,�.�c`����0�0��+E�C����(���������> -(��<�X��+c`> -���<(

iostream�

S &,����� (���+0�����.�<( 5cW"Ww���p��� ��0�B�.:;3�+ ��3�+nNL:.��`<30�����. -���3k�R����3��V #�,.82� �"(4, ��� � b,���g�. -����+E� -`<���Ny3����B+E3� -��(. ���(d���p��� M�0�6��+g`> -���<(

std�2bc������#;���d����(��<� 30� �`�`���+0+X !NL�> M3�:;���RN������ 3����B���p��� ��E� #

&,�g�. �a[�j30� � :+,5*P� K�D ��3�+n� ���� &%��3��R3����g�. -����+G� �`�� #M���/[�2���std::cin

�vb,����+ ���<` �. -����+E�U�.�<��.+3�� �a[����( +0��� `> �����( #�,.82� � *-,5�>�;� � ��� &%�.��` � (���hi�7������3DNL�> M3�:;����+D -`�`���(.�<��3� -��� ���<3 30�.�d+� �����. -�����vS 3 3����B+� -���V30����� #��7uF�.���`<��3 �*:. -���T.`> �3������ ����`<���> -+E��+ 3����B���> -(. �p.����~3s� ��Nn �.�0������ -� #� -+��3j��+g��������(��L �3���~� ���� ����<��3g&%����`��6���p��� ��E� R����a[����NL�� �3�:;���V`������<+jN������ �vS �. -��� 3��. �3 ��+j����3�*:. -���T.��( ��+ `� -����( :4# � :u,5*d� { �hB -��( :�+0:. -�~� `����0���<+E�C����(�+ 3�� �NL�> �3�:;��� (��<T.�.�<(=��� ��:��"�'&V����������� -� �

2.1.3 The main function1va[�<�0� 5cW"WU�.�0������ -� �D:�+E3 �. �a[�R

mainNL:��.`73������y� bc���B+0�����030��+E3 ���������� ��|���> �(.+ -+ NL�����'&V+<�

int main() { return 0; }

Page 22: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � ������� ����� ���� �9��� �3� � � ���

b,�.��+X���������� -� (��*��+B����3��������;�,b,�.�main

NL:��.`73������ ��+V`� -����( p*�Z3���� ���i�<�� �3����.� +E�F+G3���� &%�.�<��[��: 30���B��3�3�� ��:���3���� ���������� -�Rz%p.:;3&%���w��+��~3 Kh:4# � ���"!$# #V -��(�&V�. �3���+ �

return 0;�

+0:;���C��+0��(U3��z���> -� � ��:.+G3Z���/[�= z�d �3������d M3���`> -XNL:��.`73�������#B3����main

NL:���`<3������U`� -�)� �a[� �����:�������3�+�����a[����3�� ��3d:;�C��� �7uF��`�:;3������ ��N"3���� ���������� -� #X -��( 30�.� `����6�.:;3� �30������+ &V�~3������3����V`�:;��~� p��� -`��<+ �F�����(.+g !NL:���`<3�������a- -�:��%3��. �3g��+ ����a[����p -`�/Re_���g���<3�:;������(Ng23�� 30�.�%���C�<�� �30�����+E�*+E3���� �v^_�D��:;� `> -+0��#�&,�c�. �a[� &%�0��303����D

mainNL:���`<3������ 30� M3v(��*��+v����3 �7u*�C��`<32 -���D �����:�������3�+

e 3�����+c��+c����(���`> �3��<( p*� 3����"�<�6�.3k�dp��� -`�/[�<3�+()pC��������(

maingc -��(�&V����+0� ���<3�:;���Za- -�:��"��+c30�.�

����3������<�0� b,�.�cN -`<3j3��. �3 3����X���73�:;��� a- -�:��X�D:�+E3 pC�X -�6����3������<�j��+2����(.��`> �3���( p*�D3����,&,����(

intpC��NL���0�main

� �j� `�����a[�<��3�������#return 0

30����+c3���� ���C�<�� M3������ +E�*+E3���� 30� M3%3����!���������� �� �. -+��:�� +0:�`�`��<+0+0NL:�����e_���%30� M3X&,�"(.���0y 3%`> M���!&V���<30�.�7�%��3X�. -+ g�#�&V������" ���� ��3����<�%a- -�:��!� uF�.���`��~3���+0�����. -�+cN ����:;�����^_�Z +E30�0��`<3,�d �3������d M3���`> -�+0�<�.+E� #;3����

mainNL:���`<3������ ��N

power8.C��+c:;3030�<����6pi���������;� bc���

&V������RNL:���`<3������. -���3k����N�3����R�.�0������ -�H`�������+cN������H30�.� ���i�h� � ��N�3����"NL:���`<3������n�jb,�.��+X�<h ��`<3%��+3�����> -( d�*:�� pC�<�"N������ 3����D+E3� -��(. ���(=���;� :;3! -��(=&%�0��3�� ��3�+ ��������3��=�C�'&,�<�!30� 3���� +G3� -��(. ���(��:;30�.:;3>�gb,���"N �`<3%3��. �3XNL:���`<3�������+c`> -�Z�. �a[�!�<h ��`<3�+%+0�<3�+V5XW W �� ��03XN������ �d ���� K�:N# � ���J!$#�,5*���������� -�������.�!L -����:. -����+��

2.1.4 Values and effects

b,�.�2a� ��:��g -��( �7hi��`<3���N; ,NL:.��`<30����� ����2(��<3��<�0��������("p��"3����g5XW W +0���d -��3���`�+�� ���<���<��R/F���M&%�����3����Z+E�*��3� �`<3���`> �X��:����+���NV&X����3����.� NL:��.`73�������+6(��*��+�����3630���%:�+d -���*3�������� MpC��:;3 a- -�:���+� -��(�<h ��`<3�+��g^_��3�����+,+0����+0��#.a- -�:��" -��(Z�<hi�<`<3B ��0� �.:;������+0�<�d -��3���`> - 3��7����+��

;��� �7u� -�6�.���# &,���. �a[�63�� Z�# !$1 3��. �3!��� 5XW W�#v3�����`��. ��� -`73��<�0��+ ����3��<�0�����73���( -+ 3����

����3������<�0e -~3�����:.��� 3�����+g��+j����3 (�� �6`<:.~3j3��!��:.�<+0+ g7�2^ 3 ��+g -�+0�"���6�C���03� -��3 3�� :���(��<��+E3� -��(63��. �3

a- -�:��! ��.(��<hi��`73V(��<�C����(Z��� 3����"`�����`<�0�<3��"���������� -�\+E3� �3�� ���&V����`�� 3���� NL:��.`73������Z��+,`> �����(y�

2.1.5 Types and functionality

b,�.�,&,����(int

��+ 30�.�X�. -��� ��NC 5XW W 3k�*�C���2b,����+v3s���C�%��+2:�+0�<(�+0����`��,3����c���������� ��power8.C(��> -�+ &%��3�� ����3������<��+<� ^_� �d �3������d �3���`�+ #�����3������7��+ ����d���*(������( p*� 3����6�������

( � , +, � )� b,����+

-����7p.�� -��`R+E30��:�`<30:��0�!(��<T.����+X3����"����3��<���<��+%����3��<����+c��N�3������~�Xa- -�:��"�� -����� e 3���� +0�<3 � g�#. -��( ���3��<�0��+2��N.3��������jNL:��.`73������. -���3k� e -(�(���3������D -��(6�D:��3����.���`� �3������Ng7�C^_��5XW W�#�����3������<��+j ����c���*(������(p*��30�.�V3k���C�

int�2my��/[�R �E�d �3������d �30��`> -F3k�*�i� � #� 5XW Wx3k�*�i� �. -+, #�,.8�� # pq,5*P:u�i=�,.#;@c� #

-��( K�:N# � ���J!$#�,5*d����D # (.�7T �������D&V�. �3c&,� `> -� (�� &%��3��Z��3�� � ����� &,� ����NL�<�B3��6 D3k�*�C��#.&,�!&%���(�� +E�p�� ��3�+B�. -������ X��3�� 3��. �3B3���� �. -��� ��+ �+E�*��3� -`73���`> - -+E�C��`73"��N 3���� 3k�*�C� #C&%�.����!a- -�:���� -�����" -��(ZNL:���`<3������. -��~3s�6 ����"��N�+0���d ���3���`� -i�. �3�:;�����5,����a[����������3��� # 5cW Wl`�����3� -����+ ��:��DpC�7� ��N Kh:4#�Bc,.8��>#0�J,5*b��D (I�>� e_+0�����<3�������+ `> -����(

p.:����3 �_���B3s���C��+ gCNL����3k��� ��`> -[ ����.���`> M3�������+��yb,�.�23k�*�C�int

��+n�����j��N�3������ ��b,���j�d -rs���y(���h �<������`��3��D3���� �E�d �30�.�<�d �3���`> �.3k�*�i� �

( � , +, � )��+c3��. �3

int�. -+X T.����3��Ba- -�:��R�� -�����"������[�

Page 23: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� ��8

2.1.6 LiteralsSl���3��7�� - �0�<������+0����3�+Z `�����+E3� -��3a� ��:�� ��N"+0����� 3k�*�C��� ;��� �7u� -�6�.���#X��� ������ �>q ��N 3�������������� -�

power8.C#0��+X D��~3��<�� -C��N 3s���C�

int#����<������+E����3����.�D3����"a- -�:��

0� ;���V�> �` �Z3k���C� #���3

��+c+0�<� ��� M3�����d(��<T.����(Z���'& �~3�+,���3��<�� -�+ �����/d���/[� #� -��(�&%�. �3,3��������ca� -�:.�<+% ��0���

2.1.7 Variablesb,�.� ������

int a;��+B B �h� *-,.=�,5���J!$# ��N2 pw,.= �",cS)* � � S a� M���L �p.�� ���<������+0�<��3�+ 6����3B����`���+E+� �����~� `�����+E3� -��3Va- -�:����N2+0�����!3k�*�C�-�!b,��� a- ����� �p.�� �. -+ #�,.82� #z ��D (;� #4 pw,5*d: � #4 -��( -� ,cBcB.=�� �>� e 3k�*�.��`� -������d3����R`����6�.:�30�<� y@+g�d -���d���������0�cg7� b,���R�.:;�0�C��+E� ��Ny3���� -(�(;����+0+,��+ 3�� /F���'&U&V���<���V30� +E30����� -��(Z�����/d:;�Z3���� a- -�:����2b,���"���> �+0���ZNL���X`> -�����.� +0:�`�� -������3��~3s� pw,.= �",cS * � ��+,3��. �3c��3�+ a- -�:��`> -� pC� ` �. -������( p�� ���*(���N��*�����30�.� ���������0� `�����3�����3 �3!3����6`<���0����+E�i���.(������ �(.(;���<+0+��Zb,��� -(�(;����+0+X��3�+0�<�N �d ��d`��. -�����! �+c&,���_�2^_�Z`�����3E�� -+E3 #F30�.�"�. -���R -��(�3k�*�C�R�����d ����T;uF��(y����.�<�w&,� ����NL�<�630� a- ����L �p.���#j&,��&%���,(�� +0�=p��4��3�+ �. -����� b,���Z(���`�L ��� �3������

int a;B � { # � � a- ����L Mp ��R&%��3��3����"NL�����M&%����� ` �. ��� -`<3��<�0��+E3���`<+��

�. -��� 3k���C� a- -�:�� �(.(;���<+0+

a int:���(��<T.����( `��.��+E���Zp*� `����6�.����<� ��A"{

x2��:6��������3 &,����(��<�2&V���D3�����+2��+g`� -����( B � { #I�/���J!$# ��Na#��<a[�<�d30�.��:����6�~3g(��*�<+g����3g(��<T.���

3���� a- -�:�� ��Na� �g:�3"����`> ��230� M3"3�����+Ra- -�:�� (��<�C�<�.(�+ ��� 30�.�D���������� -��+E3� �30� # -��( 3��. �3 3����

(��<T.����3������ NL:����=+E�C��`<��T.��+ �;!$1 3����6a� ��:�����+ ��p�3� -������(��D��*��/=��3 :;�4 �3ay +D -(�(��0��+0+��={F ��F�����

3��. �3j Ba� ��0�L �p.�� �4,5� Ba� -�:.�,��+ 3����<���<NL�����X+E�����<&V�. �3 ���6�����<`���+0� #�p.:;3 &,�y@�;+E3���`�/ 3�� ��3 #>rs:.+G3g��~/[��d �3������d M3���`��L ��.+ 3� -�/� MpC��:;3 K�:N# � ���J!$# pw,5*d: � &%�����30�.�7�d -`<3�:. -��� ���� -��3����Va� -�:.�B��p�3� �������(p*�Z�<a� ��:. �3������ 3���� NL:���`<3������ &%��3�� `�����`<�0�<3��D �����:�������3�+��,� � �<a[��� ��������� +E3��<� NL:;�03����<�B&V�~3����:;�B+0������.������+0+ � ��N

a�. -+%a- -�:��

2# NL���B�7u; -�6�.�� #;&,� -�+0�6+� ���30� M3 �

a��+

2�;�Xb,����+%��+X3����!&c ��

3��. �3 ���������� -�����<��+ :�+0:. -��� 3� -�/ �pC��:;3 a- ����L Mp ���+ -��( 3�������� a- -�:���+<�Z� �6&V���j���73 3��Z/F���'&����`��. -����+0��+ NL���V -+0+0�����.���.�D -��(Z`��. -��������� a� -�:.�<+X��N�a- ����� �p.���+,��� {*�<`<3������ �*������� �*�

2.1.8 Identifiers and namesb,�.� �. -��� ��N -��� a- ����L Mp ��D�D:�+E3RpC� -� �"B �>#0��� { �>= # -`�`�����(������3�� 3����DNL�����'&V�����d(��<T.����3�������# -��(Z��3c�D:�+E3,pC�"(���h �<������3%N��0��� `��7�03� -��� =>� ����= p��hB �. -����+,��~/[�

int�

Definition 1 � #identifier

��� ,.#ID �L� � :u�># ��� ! KU� �4,.=�, �>�<�>=)����!$8X(;!.���hB ! KM�V�;�����O* � �V�<��=)�aW$WW

z,.#�B

AW$W�W

ZA �V�;����� B.�[@$�/�V�

0W$WW

9Ai,.#�B �V�;� :N#�B �>=)����!$=���

_ WU���;� { =)���9� �4,.=h, � �<�>=�4,5�9�<!�S>��,R* � �V�<�>=WSl5cW"W ���������� -� �d >� -�+0� `�����3� -��� ��3����<� �. -����+ # NL����� u� -�6�.��d3���� � :+,5*P� { �hB �. -���<+

std::cin -��(

std::cout� b,���d5cW"WO+E�F��3� Mu +E�C��`��~T �<+"&V�. �3 �. -���D��+ #n&V������ 3�����5cW"W

+0���d ���3���`<+,30����+,:�+c&%�. �3,3���� ���<+E�C��`<30��a[�!�. -���B����NL�7��+X3�� ���Z ����a[����`�����3�� uF3>�

Page 24: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�-? ������� ����� ���� �9��� �3� � � ���

2.1.9 Objects

SV����p rs��`73����<������+0�<��3�+ �.��3d����`<��+0+� ��0���� `�����+E3� -��3 -��(w�C��+0+0��p.�� ,.# !$#IDq8�!$:;� a- -�:�� ��N" 3k�*�C�-�,mn��/[�" Da- ����� �p.�� #. -�Z��p.rs��`<3V�. -+% D3k�*�i� # a� ��:��"��Nv��30+c3k�*�i� # ��.( �� -(�(��0��+0+ #�p.:�3%����3����`���+E+� �����~� 6�. -�����XSV� ��p rs��`<3V��+B �.:;�������+0���d -��3���`> -n����3���3k� � �[��: `> -�0y 3 �E+E��� �d��p rs��`73�+B���5cW"W `���(.�-�bc���2`�����`��<��3n��NF -�"��p rs��`73 ��+n�����0�v�������<�� -�3��. -� 3��. �3y��NF a- ����L Mp �� #M -��("&,�v&V����+0���2+0�����03���

3��. �3X3����<��� ��0�!�. �3�:;�� -n+0��30: M3�������+c&%���<���!&,�! -`�`���+E+R -��( ` �. -�����!a- -�:���+%�.��3X���<������+E����3��<( p��a- ����L �p.��<+��

2.1.10 Expressions

^_� 3����j���������� -�power8.C

#M3��;�����g`��. ��� �`<3��<�v+E� �*:�����`���+�+E3� -��( ��:;3 #�pi��`> -:�+0�23����<�!��*��/ N -������� �� -��( M���2�0��+E�C����+0��p.��vNL���n3����2NL:.��`<30�����. -���3k�V��N�3����2���������� -� � 3�����+0�j ���� 3����2` �. ��� -`<3��<�n+0� �*:�����`���+a * a

����������D��?6 ��.(b * b

��� �������+ �'I -��( �>#F�SV��� uF������+0+E���������<�����<+0����30+V `����6�.:;3� �3�����������a[���a*�����D��30�.�7�X� uF������+0+E������+�� �����0� ������`<��+0���� #

-� �7uF�����<+0+0����� ��+B����30�.�7� (0= �/8�,.= D �'&)(0=>�>�>���J!$# # NL��� �7u� ��6� �� 6���30�<�� - ��� 6� ���� # ���R��3V��+ ��!$89(I!.���/�<� �'&)(0=>� �����J!$# ��S `����6�i��+0��3��X�7uF������+E+0�������+ ��p�3� -������(6p��d`����Dp.���������"�7uF������+E+0������+3��;����:�����`��<�E3� -�������C�7�� �3�������+ #���� p�� �.:;303������ R� -��� ��Ni� ��0����3�����+E��+

() M����:��.(d ����7uF������+E+0�����y�

bc���c�7uF�����<+0+0�����a * a

��+2 -� ,.= ���V��8�� ���J� �7uF������+E+0������# ����a[��~aF����� #I:48��>= �J� a� M���L �p.���+�� -��(3���� �D:��3����.���`> �3����������C�<�� �30��� # rs:�+E3 ���/[� &,�D/F���M&|��3"N������ �d M3������d �3���`<+�� SV`�`�����(������3��Z��:;� �pC�'a[�%(��<T.����3������ #

a * a��+ `����6�C��+0��30�c� uF������+0+E������#�p.:����3jN������|30�.�X� :��30���.���`> �30����� ���C�<�� �3����

-��(�3����R3k&,� �������d ��E�6�7u*�.�0��+0+0������+a -��(

a�

SV`�`����0(.���.� 3�� 3���� �pC�'a[�d(.�7T ����30������# -� � uF������+0+E�����z��+D +E�*��3� -`73���`> -g����3��~3s� #vp.:;3D��3 �. -++0���d ���3���`� -� -+E�C�<`<3�+ �+2&,��� � -��� � uF������+0+E�������. -+g R3k�*�C� #D Ra� -�:.�c��N 3�����+ 3k�*�C��# ��.( �C��+0+0��p.�� -� �<hi�<`<3>� bc����3k�*�C�d��+ T;uF��(�# p.:;3 3����6a- -�:��d -��( 30�.�d�<h ��`<3D������ �d M3��<���L ��� � � &V����� 3�����7u*�.�0��+0+0����� ���73�+ �>pq,5*P:+,5�<�hB # ���> ��.���.��3��. �3 3���� `<���6� :;3� M3������ ��3 ���<������+0�<��3�+ ��+!`> ��E������( ��:;3>�1va� -�: M3������ -��� uF������+0+E�����d��+g3����%����+G3 N���� ��:�����3, �`<3���a*��3k� ���������"���d&%������X 5cW"WU�.�0������ -�t��+�7uF��`�:;3���(0zi3���� �<a- -�:. �3������Z`����6�.:;3���+%3����!a- -�:�� ��Nv3���� �7u*������+0+0�����= -��( `> ��E������+V��:;3B�~3�+V�<h ��`<3e_��N� -���cg7�bj�*�i� -��(Za� ��:��!��N �������d M�0�d�7uF�����<+0+0����� ��0� (��<3��<�������.�<(�p*� ��3�+X(.�7T ������� ���3��<�� - #;���Vp��

3k�*�C�Z -��(4a� -�:.� ��NV3����Z����3���3k� pi��������(4��3�+ (.�7T ������� �. -���-� K �0���d ��0� �7u*�.�0��+0+0������+6�. �a[�Z����<h ��`<3>�cbj���C� #�a� -�:.�! -��(Z�<h ��`<3B��N D`����6�C��+0��30�B�7uF������+E+0����� ����"(.�73��<����������(p*� 3����!����a[���a[��(���C�<�� �3�������#;(��<�C����(������D���Z3���� a- -�:���+% -��(Z�<hi�<`<3�+V��N�30�.� ����a[���a[��(Z+0:;p � � uF������+0+E������+�� K :�3E3������� �������3�����+0��+

() �����:���( -� � uF������+0+E������*�����(�+ �� �7u*������+0+0�����&%��3��63����B+� -���X3s���C� #*a- -�:��B ��.(

�<h ��`<3>�bc���R�7u*�.�0��+0+0�����

a * a#;NL���c�7u� -�6�.���#*��+ ��Ny3k�*�C�

int#� ��.(����3,:��.� uF�C��`73���(��� #;��3�+ a- -�:��B��+

3���� + �*:. ��0� ��N23���� a- -�:��D��Na� b,��� � uF������+0+E����� �. -+R��� �<h ��`<3>�Db,���D� uF������+0+E�����

b = b * b#

p.:����3jN������ 3���� ,5�>�h�[@$#I8��>#0� !>(I�>=�,5�<!$= -��(�3����%3k&,� �7uF�����<+0+0������+b -��(

b * b#*�. -+g30�.�%+� -���

3k�*�C�! -��(Za� ��:�� -+b * b

#.p.:;3V��3%�. -+V -� �(.(���30�����. -i�<h ��`<3 � ��3V -+0+0�����.+c3����!+ ��:. ���� ��Nbp -`�/

���������� ������������������������������������! "�# %$&�('�$��)�*����,+.-�/10)2,�(34����5$(�6���7�68�'����)9�8� :;3<�=�;��������6>����=3?���)�=@��68���'��#BA!9C �5�D ������������E������F�� :8��'���BA�G

Page 25: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� ��I

3��b���� �"+� �� 3��. �3% -� �7u*������+0+0�����Z��+ ��pw,5*P:+,5�<�hB �� �3����<�c3��. -� �'&`�h�>:;�<�'B # pC�<`> -:�+0� �d -���d�7uF�����<+��

+0������+c(�� ����3%�. �a[� ����<h ��`<3 #.+0� 3��. �3,3������~�%NL:���`<3������. -���3k�6��+X -+0+0��`��L �30��(�&V�~3��30�.� a� ��:��"������[�1va[����NL���c�7u*�.�0��+0+0������+ &%��3��d�<hi�<`<3 #;+0�����%pi�*��/F+ :�+0�B3����V3��7��� ���"B � � �i��� � 3�� ���6�.� �+0� � �%30� M33����%���6�C���03� -��3v3��������!��+23����%a- -�:���� b,�.�B5XW W)�<��3���30����+2` ������!.�D����+G�C����+0��p.��%NL���g�<hi�<`<3�+, ����c3�����>�J,5�<�>8��>#0�V� 3�� &%�.��` �&,�"���73%pC����M&!�� �,&c -��3v30� ���<�d ��0/ 3��. �3 3���� !$#0*dD &c �� ��N -`<`���+0+0���.�! -� � uF������+0+E�����0y@+va� ��:��c��+ 30�"�<a- -�:. �30�

��3 #� ��.( 3�����+c -�+0�D`> ��0�0����+c��:�3X��3�+,�<h ��`<3>��x2��:�`> -������3X���<3X30�.�Ra- -�:�� &%��3�����:;3 3����"�7hi��`<3��

Valid and implementation-defined expressions.SV��7uF������+E+0�������+ `> -����( pw,5*d�"B ����3����B`�����30�7uF3

��Ny "���������� ��|��:�����Ni3����R5cW Wx+0���d ���3���`<+j(��<T.����+ ��3�+2�C��+0+0�~p ��ca- -�:���+ ��.(d�<h ��`<3�+ #F(��<�C����(����������3����R�.L �3�NL����� #�3����"���������� �� ��.(� -�y��3�+,���;�.:;3�+��$%�'& `> �� -� �7uF������+E+0����� pC�6����a- -���( � ;���!�7u� -�6�.���#� -N�30�<� (��<T.������� 3���� a- ����L Mp ��

a&%��3��

int a;# 30�.� 5XW Wt+E3� -��( M��( +E3����.:�L �30��+c30� M3V��3�+ca� ��:�� ��+V:���(��<T.�.�<(+z.3���� ���7uF3V�*`�`�:;���<�.`<� ��N

a���Z3���� ���������� -� ��+%3������ -� ����a� -���(Z�7u*�.�0��+0+0�����y�R^ 3B��+V���6�C���03� -��3,3���:���(��<��+E3� ��.( 3��. �3%3�����+

-�+E�D�����(�+ ��NC�[��:;�c`����6�.����<�gNL���c�7u� -�6�.��%(.�<`���(���+ 3�� ������3��L ��� � � a ��� int a;&V��30�a- -�:��

0�2^_�

3�����+V`� -+0� #i3���� a- -�:�� ��+B(��<T.����( !$#CDN!$:N=s(+* ,5� KL!$= 8 # p.:;3V������p �p.��Z����3B��� ��3����<�B�.L �30NL������+��b,�.�R������<a� ���3VN �`<3%��+c3��. �3 �V�;� rkt9t ���>8�,.#0���"� � (��*��+c����3%(��<T.��� 30�.�Ra- -�:����SV� ����a� -���(Z�7u*�.�0��+0����� ��+X����3%p -( (I�>= ��� � ��N ������ ��3�+ca� ��:��!��+X:.��(��<T.����(�#.p.:;3V3�����+,a- -�:��

��+d����3:.+E��(�#%3����<��� ��+d��� ������p.���� � ^_� ��:;����������� -�power8.C

#%3���� ������int a;

��+dNL������'&,��(�p�� 3����"������

std::cin >> a;# -��( -�30�.��:����

a��+V -������a- -���( �7uF�����<+0+0����� ����30� M3%����.��#

��3�+ :���(��<T.����( a- -�:����. -+ ��� ��� !.:.�<�.`<����� 3����6pC�<� �a*����� ��N,3����6�.�0������ -� � b,����+ ��+ pC��`� -:�+0�std::cin >> a;

+0�<3�+a3��V3���� a� ��:�� ����3��7����( p*� 3���� :�+0�<� #�`<���6� ��<3�����"���������������c3���� �.�0�<aF����:�+

a- -�:����^_��a- -���("�7uF�����<+0+0������+ &%��3�� :��.(��<T.����( � �i��� �V� ����j -�&c ��F+Cp -(�#-+0���.`<�23����<� ��� -(!3��c:��.(��<T.����(

pC���. �aF����� ��N�3����j���������� �� �nS%�[ -����# !$#6D`!$:4= � (I���>� { ��(+*-,5� K�!$= 8 #��<a[�7�0�*3��������X��������3C&,���0/ #�+E����`��3����B`����6�.����7� �d ��6`����*��+0�B3�� ���6� ���������3g -��<hi�<`<3,3��. �3 ��+ ����3,�. �����NL:� ���d�[��:;�X ����.���`> M3������y��g:;3X�[��:�`> -������3X���<�����Z��3c���Z��3����<�c�.L �3�NL������+<�$%�<���X��+j R+E`����. ������ &V���<���c:���(.�7T ����( a� -�:.�<+ ,.#�B �<hi��`73�+ `������,:;�n� � �~3�� �� M���X� u;`��<��3������.+ #

��3���+�����3Z+G�C��`���T.��()��� &V����`��U����(��<�Z3���� +E:�p �_�7uF������+E+0������+Z���) z`<���6�C��+0��3�� �7u*������+0+0����� M����<a- -�:. �3��<(n�Y^_N 30�.� �<h ��`<3 ��N! +0:;p � � uF������+0+E����� ��� !.:�����`���+6a- -�:���+���d�<hi��`73�+���N ��3����<�+0:;p ��7u*�.�0��+0+0������+ #�a- -�:��! ��.(��<hi��`73V��N 30�.�"`����6�C��+0�~3��B�7uF�����<+0+0�����Z�d ��d(��<�C�<�.(����Z3����"�<a- -�:. �30���������(��<�>�j^_��3�����+,`> �+0� #�3���� 5cW"W +E3� -��( M��(�(��<T.����+X30�.� `����6�C��+E��3��B�7u*�.�0��+0+0�����Z -+%����a� ����(y�SV������� 30�.�a� ����(z� uF������+0+E������+ # 3����<���� ���� T���+G3 � `�� -+0+D`���3�� � ����+ # �. -������=3�����������+ &%����+0�

a- -�:���+6 ��.( �7hi��`<30+6(�� # !.� (��<�C����( ���43������.L �30NL����� �z^_(��> ���� # �� a� -���(4�7u*�.�0��+0+0������+6��� ���������� -� +0����:��(ZpC� ��N 3��. �3X3k�*�C� # +0����`��!30�.�"�Ma[�7�� -� ���[ -���+c3�� &X����3�� � � �3�NL����� �_����(.�7�C����(�����3`���(.�-� ^_� ���� -���3k� # �.L �30NL������+B ���� +0�(���hi�7������3R3��. �3B30�.��+B��+R� M��( 3�� -`������<a[�-� SV+ �d -������3����<�L -����:. -����+ #i5cW"WR -���M&%+ ��!$#0��=�!.*/* �hB�:;��� ��N � � �3�NL����� �_+E�C��`��~T ` NL�> �30:��0��+���� S a� -���( �7uF�����<+0+0�����

�)����������� �,�D���=������= �@ 3<�=� ��������=��������69:8� : ����� � C ���6��'# � �DA 3<�=��� �'7�6����( �� �6;����5 �� C $(��'� ��5�(3b���;����

�� ����5� �� �6��� �(3 �����('�@ $=�='# ���=3bG

��� �!�D�'�A @: ���� �����B��=�����6��' ���)�=���( ���9������ �='���� ��'�'�� C �F � ����! �D���('�'���@ ���� �=34��'7�6�3<�=����� �D� ���������;3<�6�6� ����)��9� � ��3<�=��� � ��6�� '�A!G�� � C �! � F@����!�� ���� �� ��� ��������������(G

Page 26: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��P ������� ����� ���� �9��� �3� � � ���

&V����+0� a- -�:�� ���R�<h ��`<3 (��<�C����(�+R��� 30�.� �.L M3�NL����� ��+B+� -��( 3����. �a[� �[8X(+* �>82��#0�J,5���J!$#7B � { # �hB+0���d ���3���`<+�� ;���%+0:�`�� -� �7uF������+E+0������#;3���� 5cW"W +E3� -��( M��(�:�+0:. -�~�6������+0`<�0��pC��+ ,R��8G,5*/*��L� � ��N�C��+0+E��p.��Ba� -�:.�<+% -��(Z�7hi��`<30+�� ^ 3,&V���i3������Z(��<�C�<�.(������[��:;�X�.L �30NL�����O&V����`�� a- -�:��" -��(��<h ��`<3N������\3�����+,+0�d -�C+E�<3X30�.� �7u*�.�0��+0�����Z�. -+<�bc���<�0����+ ��� �������`> �2&c �� ��N,(���(�:�`�������&%�.�73����<� -� �7u*�.�0��+0+0����� ��+ ����a- -���( ��� � �+ ���6�.����

������3� �3������d(��<T.����(Z+0�<�d -��3���`�+�� ;���%� u� -�6�.�� #*��Nn30�.�Ra- -�:��"��N� -��� uF������+0+E�����Z(��<�C����(�+c����3�����<a- -�:. �3������ ���0(.�7� ��N2rs:�+E3 3k&,� +E:�p �_�7uF������+E+0������+ # �[��:z`���:��( �����:���3��. �3 30�.�7��� ����d������=3k&,��C��+0+E��p.�� ��:;3�`������<+��Z^_� 3�����+ `� -+0� # +0����:��(��0y 3!30�.� a� -�:.� pC��`> -����( ���6�.���������3� �3������ (��<T.����(�� �30�.�7�%3��. -� :���(��<T.�.�<( � b,��� (���+0�������<�0+%��N%5XW W�(���(��0y 3c3������;/ +0� # ��.( 3����<� �d -(��R3���� L �& �x2��:d`> -� �*:���+E30������3����VL �& #���NC`���:;��+0� #Fp.:;3 �������������� -�������.�!5cW"W #*�[��:+E3����.�. �a[�V3�� ����+E�i��`<3��3 #C��30�.�7�0&V��+E� 30�.�7���y@+B30�0��:�p.��D -���> �(n� ^_�=��:;� �<a� ��:. �3������ ����(��<�"�7u� -�6�.���# �[��:=+0���6� ~� 86:4�>�# !.� ������!��� 3���� +0�<3v��N;3k&,�%�C��+E+0��p.��g��:;3�`<������+ �n+0����`��g3����,5cW W�+0���d ���3���`<+�(��*��+��.��3��.�0��+0`<���~pC�3�����+ +0�73 #;�[��:��c`����6�.����<� ��������3 (�� +E�����<3�������� ���+0�fe_NL���c�7u; -�6�.�� #F��+0+0:�� -���<�E�����c����+0+� -����#F�����<3,3���� �.�0������ -�\`<�� -+E�4g �

2.1.11 Lvalues and rvaluesSV�Z~a� -�:.� ��+X -�Z�7u*������+0+0�����Z3��. �3c� �+V -� �(.(;���<+0+��O^_��30�.� ���������� -�

power8.C#.30�.�Ra- ����L �p.��

b��+% -���a� ��:�� #� -��(Z��3�+c -(�(;����+E+%��+ 3���� �(.(;���<+0+X��N 3���� a- ����L Mp ��

b�

bc���!a- -�:��"��N -� �a- -�:��"��+%(��<T.����( -+X30�.�"a� -�:.�"��N 3����!��p.rs��`<3B M3V��3�+X -(�(;����+0+<�cS%� �a� ��:��`> -�d3����<���<NL�����VpC�VaF���<&,��( -+ 3����B+E�*��3� -`73���`> - `���:���3��7�0� ��03 ��Nn -���p rs��`73 �v��3 ����a[�<+g3����B��p rs��`73, e 3��<�6�C���� ��0�cgg�. -��� -��(��d �/[��+c��3 �GaF��+0��p.�� � &V��30�.��� 5cW"W ���������� -� � �=� -�+E� +� ��3��. �3,3�����a- -�:�� =>��KL�>=)� 30�D3���� ��p rs��`73V �3X��3�+c -(�(;����+E+��^_� � ��030��`�:�L �� # -��� a- ����� �p.�����+ -� �a- -�:���� �g:;3 �a� ��:���+ �����Ma*��(��d ���> -��+ NL��� -`�`��<+0+0�����

-��( `��. -��������� ��p.rs��`<3 a� ��:���+ #n�<a[��� &V�~3�����:�3 �. �aF����� `<���0����+E�i���.(������da� M���L �p.���� SV+R&,� &%���+0��� ���={*�<`<3������ �*������� �DpC����M& #.3���� �7u*������+0+0�����

std::cout << a�E����(�(���� �6��� ������ �>#6��+V+0:�`��

-�Z~a� -�:.�-�SV�����7uF�����<+0+0�����Z3��. �3%��+%����3V -� �a- -�:��!��+% -�Z�0a- -�:���� ;���B� u� -�6�.�� #;���3��<�� ��+% M���"�0a- -�:���+ �

3����<��� ��+B��� -(�(;����+0+ -+E+0�*`��� �3���( &V��30� 30�.�int

� ���3��<�� �0#C+� ��[�!K :;303������ � -���B��N � �������3�����+0��+

�����:���(Z ��Z�a- -�:��B�F�����(.+X -�Z~a� -�:.��#; -��(Z+0������L ����� NL���c�0a� ��:���+��bc���%30�<����+2 pw,5*d: � -��(6� pw,5*d: � -����� -(;� ���.(���`� �3�� 3��. �32&,�X3������;/ �pC��:;323������ ����3 +E� � :�`��

��� 3��7����+!��N �7u*������+0+0�����.+ # p :;3 �� �3����<� ��� 3��<����+"��N 3�������� a- -�:���+��d� � &V��� ��N�3��<� ��(.�<��3���N��= -��a- -�:��B&V��30� 3���� ��p rs��`<3X��3,����NL�7��+X3�� #. -��( �� �0a- -�:�� +0���6�.��6&%��3����3�+,a� -�:.�-�

2.1.12 Operatorsmy����� ��? ��N

power8.C#�NL���%�7u; -�6�.�� #FNL�� �3�:;����+c3���� p.���. ��0�d�D:��3����.���`> �3������ ���C�<�� M3����

*�

mn�~/[�" NL:���`<3�������#; ������C�<�� �3����,�7u*�C��`<3�+X �����:�������3�+�e_���<��� -�+0� `� -����( !>(I��=�,.#�B5� g ��Nn+E�C�<`����T.��(3s���C��+ #�N������\&V����`�� ��3c`����6�.:�30��+c =>�>��:4= #Upw,5*d: � ��N +E�C��`��~T �<( 3k�*�C��# �`�`�����(������ 3�� ��30+K�:N# � ���J!$#�,5*d����D �t^_� -(�(���3�������#*30�.�<+0�"`<���6� :;3� M3�������+ �d ��d�. >a[�! -�Z�<h ��`<3>�bc����+ &c -+"30�.� +0���d -��3���`> � a*���<& z ��� 3���� +E�*��3� �`<3���`> �j��7a[�� # 30�.� ���C�<�� ��.(�+! -+"&,���g -+ 3����

`����6�C��+E��3��B�7u*�.�0��+0+0�����Me p :���~3,N������H30�.� ���C�<�� �3����X -��(Z��3�+c���C�<�� -��(.+ #;+0��� {*��`73������ �*�������>].g�#; M���

Page 27: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� ��o

�7u*�.�0��+0+0������+>z�3����!���i�<�� �3����X+E�C�<`���T.��+%NL���%�> -`�� ��N�3������H&V���<3����<�X��3X��+X -� �a- -�:��R���B -�Z�0a- -�:����^_N 3����c`����6�C��+0�~3��,�7uF������+E+0�����6��+j -���a- -�:�� #�3����c���C�<�� M3����g��+j+� ���( 3�� ���<3�:;��� 30�.�X��p rs��`73j���<NL�<�0����(3��dp*� 3����D�a� ��:���� ^_Nj30�.�D`����6�C��+E��3�� �7u*�.�0��+0+0����� ��+" -� �0a- -�:�� #C3����D���C�<�� M3���� +0���6�.����0�<3�:;����+��3�+ a- -�:����bc���6��:��DpC�7� ��N ���C�<�� -��(.+"��+!`� -����( 30�.� ,.= ����D ��N 3����6���C�7�� �3����>�$����+E3!���C�<�� M3�����+ �. �a[�

����~3s�1

e_:��. ��0����C�<�� �3�����+ g ���2

e p.���. ��E�d���C�<�� �30����+ g7����.�<�.�7a[�<� -�D�0a- -�:��,��+v�7uF�i��`<3���(6 -+g �� ���C�7�� -��(�#��~3 ��+2 -�+0�B�C��+0+E��p.�� 3��R�.�0�Ma*��(��X �� �a- -�:����

^_� 30�.��+c`� -+0� #F3����R�a- -�:��B&V��� +0���6�.�� pC�R����30�<�0�����<3��<(Z -+c -��0a� ��:�� #;���> -������� 3��. �3,��30+X �(.(;���<+0+��+ ������ :�+0�<(z3�� ��*��/ :�� 3�����a� ��:�� #vp :;3 # !.� 3�� `��. -�����d��3>� b,�.��+D��+ /F���M&%�z �+ *dpw,5*d: � H"�<!.H= pw,5*d: �9��!$#Ip���=)���J!$# �2^_�6+E3� �3������B3��. �3g -� ���C�7�� -��( �D:�+E3 pC�% �� �0a- -�:�� #�3����X���i�<�� �3���� 3����<�0��NL�������:. ��� -��3�����+630� M3�3���� ���C�<�� -��(0y@+6a- -�:��Z���<�d -����+ :���`�� ��.���<(+zBp�� �7uF�i��`<3������ -���a- -�:�� # 3�������C�<�� �3����c�7uF�.���`���3���6+0�����. -�+,��3�+,����3�����3������d3�� `��. -�����"3����Ra� ��:����

Evaluation of composite expressions.���.�<�= 6`����6�i��+0��3��"�7uF������+E+0����� ����a[���a*�����6 -� ���C�<�� �3����

���<3�+��<a� ��:. �3���(�#�30�.�g���C�<�� -��(�+ M��� �<a- -�:. �3��<( T.�0+E3 e ���<`> -�[3��. �3�30�.��+ -�+E�V`> ��0�0����+���:;3 3���� �<hi�<`<3�+��NC3����R���C�<�� -��(�+ #���Nn -���cg7� � -+0��( ���3����V���<+0:��3������!a- -�:���+ #F30�.�B���i�<�� �3���� `����6�.:�30��+g3����Va- -�:����N 3���� `����6�C��+0��30�!�7u*�.�0��+0+0�����y�"bc��� L M303��<�R`����6�.:;3� �30������+X�d ��Z�. �a[�D -(�(���3������. -n�<hi�<`<3�+ #y -��( -�C�7hi��`<30+%3������<3����<�cNL�����\3����!�7hi��`<3X��N�3���� `����6�C��+0�~3��B�7uF�����<+0+0�����y�

Operator specifics.���. �3v��+ �~3 3��. �3 +E�<3�+v���C�<�� �3�����+v M� M�03vN������ NL:���`<3�������+�� AR� 3���� ����� �. -��(�#

3����<���!��+%������� DT.����3��"�*:��Dpi�<�%��N �i��+0+0��p.��"���C�<�� �30��� �<!.Zw��#0� +0:�`�� �++���

=� �Z -������N 3�����+0�

3���/[����+,(�������`73��� `����0����+G�C����( 3�� &,�����_/*�.�'&V�d�d �30�.�<�d �3���`> �F���C�<�� M3����,+E�F� pC���+j����(���`> �3����.� 3����NL:���`<3������. -��~3s�D��NC3����B���C�<�� �3����>���6AB�d3����B��3����<� �. -��(�#F -��(d����+E3 `�����a[����������3��� #*���i�<�� �3����g`> -��+(��d�.��3V� �a[� 3�����pC�7�Z3���� :�+0:. - NL:���`<3������ `> -������3� �3������ # ���/[� ���

f(x, y)�VSVN�3��<� �� # &,� &c ���3

3�� &X����3��a * a

��� D���������� �� #� -��(Z����3*(a,a)

�,^_� +0:����d ��E� #*���C�<�� �3�����+X��<3X:.+c&%���~3��"�����0��. �3�:;�� -y ��.(��������B���> -(. �p.��R`���(.�-�

;��:��"(���hi�7������3 ���C�7�� �3�����+fe �� ��Nj30�.�<�lp.���. ��E� g%�*`<`�:;�"���power8.C

#y� �������Z3���� p.���. ��0��D:.~3����.���`> M3������=���i�<�� �3����

*#g3���� -+0+0�����.���<��3D���C�<�� M3����

=#g30�.����;�.:;3 ���i�<�� �3����

>># -��(z3����

��:;30�.:;3X���i�<�� �3����<<�gmy�<3X:�+X(���+0`<:.+E+X3������\����30:��0�n�

Binary multiplication operator.bc��� p.���. ��0� �D:��3����.���`> �3���������C�<�� �3����

*� uF�C��`73�+B3s&,���0a- -�:��

���C�<�� -��(.+R��Nj+0����� 3k�*�C� � #y ��.( ��3R���<3�:;����+R3���� �.�0�*(�:�`<3 ��Ng��3�+B3k&,����C�<�� -��(�+ -+ -�=�0a- -�:����b,�.� �D:.~3����.���`> M3������ ���i�<�� �3����X�. -+c�.� �<hi�<`<3>�

Assignment operator.b,�.�X -+0+E������������3 ���C�7�� �3����

=�7uF�C�<`<3�+j -�6�a- -�:�� ��Ni+0����� 3k���C� � -+2��3�+

T���+E3,���C�7�� -��(�#; -��(� ���0a- -�:��B��NC3����R+� -���%3k���C�R -+,��3�+ +0�<`�����( ���C�7�� -��(y�j^ 3c �+0+0������+ 3����Va- -�:����N 3����6+0�<`�����( ���C�7�� -��( 3��Z3���� T���+E3 ���C�<�� -��( -��( ���<30:��0�.+"3���� T���+E3 ���C�7�� -��( -+ -� �a- -�:����^_�Z��:;�c�.�0������ -�

power8.C#�30�.�"�7uF�����<+0+0�����

b = b * b3����<���<NL�����!+0�73�+X3����Ra� ��:��"��N

b3�� 30�.�

+ ��: M���!��N ��3�+ �����<aF����:.+,a- -�:�� #. -��(�3��������0�<3�:;����+b�

���� :3<�(��� � �6���'#A�9E����"��=>�� =�)�=�����)�B� �( �@�� �� � �6������ �6�� �)�=';�=�������! � � �

:=9F�= �@ ��( �� � �6������ �6�� �)�='

���& ��'�� BA=9�� ���! ��D��� �F���! :� ��� �=3 ���( �37 ������( 3<�(�F8 ���!�� � ������)G

Page 28: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��# ������� ����� ���� �9��� �3� � � ���

^_� N -`<3 # 30�.�!��<303��7� �E �6���Z30�.� 30�<��� �a- -�:��"+E3� -��(�+VNL���B3���� N -`73V3��. �3V3���� � uF������+0+E����� �d >� ����C�> M�v��� 3���� * �/K>� � ��.( +E��(�� ��N� -� �+0+0������������3����C�7�� �3����>�v{*������L ��0�� #�3����g3��<�0�Y�0a- -�:�� +0�����. -�+ -�Z� uF������+0+E������3��. �3c�d �� ����C�> ��X������d����3���� = �[@.�c� � ��.( +0��(�� ��Nv -�Z �+0+0������������3X���i�<�� �3������

Input Operator.^_�

power8.C#v3����d`����6�C��+0�~3�� �7u*������+0+0�����

std::cin >> a��� ����.�Z���d+E�<3�+

3����Ra� ��0�L �p.��a3��D3����"���7u*3%a- -�:�� N������H30�.� �>�J,.#�Bc,.=�B6�/#�(0:4� #.:�+0:. -���63����"/[�7�*pC�[ ��0(n�

^_�=�������<�� - # 3���� ���;�.:;3B���C�<�� �3����>>�7u*�C��`<30+" �+ �~3�+VT���+E3R���C�<�� -��(= -� �a- -�:��!���<NL�<�0��������3��

-� �[#�(0:;� ����=>�h,.8 � b,��� +0�<`�����( ���C�<�� -��( ��+" -� �a- -�:��D��N +0����� 3k�*�C� � �nb,�.� ���C�<�� M3����!+E�<3�+3����%+E��`�����(d���C�<�� -��( 30�!3����%���7u*3ga- -�:��X���� -(�N������|30�.�X���;�.:�3j+E30�0�> -�| -��(6���<3�:;����+j30�.�X+E30���� -� -+X -�Z�a- -�:����SV�6���;�.:;32+E30���> ����0�<������+0����3�+g3����c+E3� �30�X��N +0�����,���;� :;32(��<aF��`���� � �,3������;/ ��N 3�����+ (��<a*��`��X -+

�����*(�:�`������ `�����3����*:���:�+ +E30�0�> -�O��Nn( M3� !3��. �3,`> -�dpC�B3� ����C�<(3�� �����'aF��(��B���;�.:;3,��� (����d ��.(y��%��(��<� 3�����+ �C������3!��N aF���<& #n3����6+E3� �30�6��N 3����6+E30�0�> -�e`����E����+E�C����(�+!3�� 3����6+0� ��:.�<�.`<���N (. �3� ����3 �[�<3,���> -(y�2^_��+E�<303������ 3����Ba- -�:��B��N �~3�+ +0��`�����( ���C�<�� -��(�#*3����R���;�.:;3 ���C�<�� M3���� �������'a[��+ �����(. �3� !�~3���� N��0��� 3����B+E30���> �� 3�� ��� !.��`73 3����BN -`<3 3��. �3j3�����+ ��3��<� �. -+ ���M& pC���������> �(n�� ;��� 3�����+ #��32��+2���6�C���03� -��3 30� M3j3����c+E30���� -�|`<������+g �+ -�6~a� -�:.�-� 5,����`��7�.30: ���� #[ -�6�����.:;32+E30���� -�|��+g -�+0�`�����+0��(��<�0��(�� ��03X��N 3����R���������� -�\+E3� M3����$%�'&\� :�`��z��N,3���� (. �3� Z��+ ���> -( �+D�������3���� # ��.( ���M&\�7u; -`<3�~� ��3D��+ ����3��7�0�����<3���(z -+D

a- -�:��6��N 3k�*�C� � ���������� (��<�C����(�+ ��� 3���� 3k�*�C� � ��N 3����6+E��`�����( ���i�<�� -��(y� ;��� ���M& # ��3!��+������:���� 30�d/*���M& 3��. �3%3�����+B����30�<�0�����<3� M3������ ��+V���> �(.����Z(��<T.����( NL��� 30�.� 3k�*�i�

int -��( NL���R3����

��3����<�XNL:��.(. -���<��3� -i3k���C��+,&,� &%���C����`���:���30�<�%����3����"NL�����M&%����� +0��`<30������+��^_� 5XW W�#i30�.�!�a� ��:��

std::cin����NL�<�0+R30�63����!a� M���L �p.��

cin(��<T.����( ���Z3���� ���;�.:;3��-��:;30�.:�3

���p��� M�0� #; -��(�3�����+ a- ����L Mp �� `<���0����+E�i���.(�+,3�� 30�.� +E3� ��.(. ��0(Z���;�.:�3,+G30���> -� �^ 3g��+2:;�630� 3����,���������� -�Ry + `> -���<� 3�� T.�F30�.�c+E3� ��.(. ��0( ���;�.:;3 +E30���> ��t&%��3��D( M3� *�� ;���j�7u� -� �

�.�� #i+E:����C��+E� 30� M3B3���� �.�0������ -� &c -+R+E3� ��03���( N������l 6`������d ��.( +E�.�<�_�Rb,�.�<�=:�+0:. -��� #.&V������3���� �.�0������ -����+B��:��.������� #n -� ���;�.:;3R3�� 3����D`������d -��( +0�����2��+ NL���0&c ���(���(=30� 3���� �.�0������ -�Ry@++E3� ��.(. ��0( ���;�.:;3 +E30�0�> -� � ^ 3,��+, -�+0� �C��+0+0��p.��X3�� ����(�������`73c !�.�0������ -�Ry@+g+E3� -��(. ���(d���;�.:;3 +E30���� -�3��D���> -(Z(. �3� N��0��� T.��R����+E3��> -(y�bc���jN -`<3n3��. �3y3����j���;�.:;3n���C�<�� �30���n�0�<3�:;����+n30�.�2���;�.:;3 +G30���> -�)��+n����3 �`�`���(�����3� - #M -+n��3 -���'&V+

3��Dp :����( �7u*������+0+0�����.+X����a[��~aF����� `�� �����+c��N����;� :;3,���C�7�� �3�������+ #;+E:.`�� �+std::cin >> x >> y

�� �R&V���C(���+0`�:�+0+,3�����+c����`�� ��.��+0�O����(��<3� -��CNL���%30�.� ��:;30�.:;3X���i�<�� �3����cpC����M&!�

Output Operator.^_�

power8.C#R3���� `����6�C��+E��3�� �7uF������+E+0�����

std::cout << a���x������z�>#

&%�0��3���+ 3����Ra� -�:.� ��Na3�� 3���� �>�J,.#�Bc,.=�BM!$:4� (0:;� #;:�+0:. -�~��3����"`����6�.:;3��<�,+E`<�������y�

^_�Z�������<�� � #*3���� ��:�3E� :;3,���C�7�� �3����<<�7uF�i��`<3�+X -+c��3�+ T���+E3X���C�<�� ��.( -�Z~a� -�:.�V�0��NL�<�0�����.� 3��

-� !$:4� (0:;���>��=>�h,.8 �gb,���X+E��`�����(����C�<�� ��.( ��+g �� �0a- -�:��X��N +0����� 3s���C� � ��bc���c���C�<�� M3����j&X����3��<+3����Ra� -�:.� ��N 30�.� +0��`<���.( ���i�<�� -��( 30� 3���� ��:�3E� :;3c+E30�0�> -�H -��(����<30:��0�.+,3���� ��:�3E� :;3c+E30�0�> -� -+ -�Z~a� -�:.�-�SV�6��:;30�.:;3 +E30���� -�t�0�<������+0����3�+j30�.�,+E3� �3��c��N +0����� ��:;30�.:;32(.�7aF��`��-� � �,3������;/ ��N 3�����+ (��<aF��`��

-+"+E3����������3���� `�����3����*:���:�+ +E30���> �� ��N ��:;30�.:;3!(. �3� d3��. �3"��+ �������<�� �30��( p*� 3���� ���������� �� � ^_�&%�0��3������ 3�� 3����!+G30���> -� #;3����"��:�3E� :;3%���C�<�� �30���X3����<�0��NL����� `��. -������+X3���� +G30���> -� +E3� �30� # ��.(Z30�.��+

Page 29: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� ��q

�d �/[��+%��3V����`��<+0+� ��0� 30�6�.�0�Ma*��(��!3���� +E30���� -� -+B �� ~a� -�:.�-�B5 ���.`<�<��3�:. -��� # -� ��:;30�.:�3%+E30���� -���+X -�+0�D`�����+0��(��<�0��(�� ��03X��N 3����R���������� -�\+E3� M3����^ 3 (.�7�C����(�+B��� 3���� 3k�*�C� � ��� &V����`�� NL�����d �3V3���� +0��`<���.( ���C�<�� ��.(0y +Va� -�:.� ��+V&%����3E3���� 3��

3����+E30���> ��Rz NL��� 3����3s���C�int

-��(z3���� ��30�.�7� NL:���(. -������3� - 3k�*�C��+ #g3�����+ NL�����d �3D��+ ���> -(���~�(��<T.����(y�5XW We(��<T.�.�<+� +E3� ��.(. ��0( ��:;30�.:;3 +G30���> -�

std::cout ��.( ���J,.#�Bc,.=�B ��= =>!$= +E30���� -�

std::cerr���3����"���;�.:;3��-��:;30�.:;3,���p��� ��0�[�

^ 3 ��+ :;� 3��B3����g���������� -�Ry +�`> ����<� 3��B�.�0�*`���+E+ 3�����+0� ��:;30�.:;3v+E30���� -��+��� ;��� �7u; -�6�.�� #�+0:;�.�i��+0�3��. �323����X���������� ��t&c -+j+E3� ��E3���(6N������ "`������d ��.(D+0����� �vbc������:�+0:. -��� #�&V������ 3����X���������� -����+��:���������� # pC��3�� +E3� -��(. ���( ��:;30�.:;3R+E30���> ��l -��(=+E3� ��.(. ��0( �<�E����� +E30���> ��l ���� NL���0&c ���(���( 3���3����`������d -��(+0�����_� �g:�3X��3%��+% ��+0� �i��+0+0��p.��R3�� ���<(.�~����`<3%���.�"���%pC��30�Z��N 3�����+0�"+E30���> ���+X3��D&%����30�3�� "T.��X����+E3��> �(n� b,����+ `> ��dpi�V:�+0��NL:� 3�� +0�7� M�� �3��%�0����:�L �� ��:;30�.:;3�e_+E����3 30�

std::coutg2N������

�<�0�0���%��:;30�.:;3 e +0����3c3��std::cerr

g �SV+%���.(���`� �3���(� �pC�'a[�"NL���%���;� :;3c+E30�0�> -��+ #���3c��+,�C��+0+0�~p �� 3�� ��:;30�.:�3X+0�<a[�7�� -ya� -�:.�<+X3��;����:����

�����"� uF������+0+E������# �+X���

std::cout << a << "^8 = " << b * b << ".\n"

�Z ��*pC� 3�����+!�����/F+! p.��3 +G30�� -����� #�pi��`> -:�+0� 30�.�7���6��+"������� 3������ �����<<���C�7�� �3���� -��( �������

3��. -�3s&,�D���C�<�� -��(.+�z�p.:;3c�����d M3������d �3���`<+ #�&,� -�+0�D&X����3��a + b + c

-+c +0�����03�`�:;3cNL���V�<��3����<�(a + b) + c

���a + (b + c)

z�pC��`> -:�+0� -(�(���3��������+, -+0+0��`��L �3��~a[� #*&,�R(����+y 3,�<a[���Z�. �a[�B3��D+E�C��`���N��&V����`��a� ��0�L -��3c&,� ����3��<�.(y�^_�d5cW"W #*+0:�`���+0�����03�`<:�30+g ��0�% -�+0�! ����'&,��( ��� ����(��<�23�� �a[����( `��:;303��7�������":;� 3����X`���(��X&V�~3��

� �������3�����+0��+<� �g:;3B5cW W����C�7�� �3�����+c ��0�!��� �������<�� -n����3V -+E+0�*`��� �3���a[� #*+0� &,� � �a[� 3�� /*�.�'&)3�����9�������`> - � ��0����3�����+E��+>y.��������(��<�c3�� :.��(��<��+G3� -��(�3���� ���> -������� ��N 3���� +0�����03�`�:;3>�bc��� ���C�<�� �3�����+

>> ��.(

<< ��0� * ��K��VH',5�>��!��>�",5���[p�� #y���> -������� 3��. �3B30�.�D �pi�Ma[� �7u*������+0+0�����=��+

�������`� -��� � M������30�.�<+0� � ��(Z -+XNL�����M&%+��

(((std::cout << a) << "^8 = ") << b * b) << ".\n"

�X�<`> -�C3��. �3,3���� �����.�7������+E3,�7u*�.�0��+0+0�����std::cout << a

��+X -���a- -�:��B����NL�7�0������� 30� 3���� +E3� -� �(. ���( ��:�3E� :;3R+E3E���> -� �"$%����`�� #C3�����+R�7u*������+0+0�����=+0�<�Ea[��+ -+ �����[ ��T���+E3 ���C�<�� ��.( NL��� 3����D���7u*3��:;3��<�%`����6�C��+0��30� � uF������+0+E�����

(std::cout << a) << "^8 = " ��.( +E�6���y�,bc���!NL:�� �7u*������+��

+0����� 3����<�0��NL�����d��:;30�.:�30+!3����6a� ��:���+ ��N ,5*/* �7uF������+E+0������+ �*`�`�:;�0�0����� -N�3��<�D+0�����<<# N������ ���N�3

3��Z��������3>�b,�.� ��������30����+E3!��N 30�.�<+0���7uF�����<+0+0������+ ����(�+ &V�~3��\n&V����`�� ����`��*(���+ ������� p����� �/

e_���<&%������)g7�

2.1.13 Statements

S +E3� �3���������3V��+% p -+0��`"p :����(.���.� p.��*`�/���N �5XW Wt���������� �� # ��.( ��3X�C��+0+0�~p ~���. -+B �� �7hi��`<3��b,�.�2�<h ��`<3 (��<�i����(.+n���"30�.� ���������� -�)+E3� �3��2 -��( �d �3��7���L -�� � ��+ &%�����!3����2+E3� �3��<������3y��+ �'& ���>:4�<�hB �SV+ &V��30�D� uF������+0+E������+ #�&,� +� �� 3��. �3 V+E3� M3���������3 B !� � +E�����<3��������;� S +G3� �3������<��3v:�+0:. -�~� ����(�+&V�~3�� +E������`�������= -��( ���<������+E����3�+ �E+E3��<� �Z��N 3����D�.�0������ -� �d{�3� M3���������3�+ ��0� �7uF��`�:;3���( ���3���� �_30���_pC��3030��� ����(��<�>� b,���D+E�.���E3���+E3B�C��+E+0��p.�� +E3� �3���������3B��+%30�.� #I:4*/*m���J,5�<�>82�>#0� `�����+0��+G3������

Page 30: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

8�] ������� ����� ���� �9��� �3� � � ���

������Z��N 3���� +0������`�������0zi��3B�. -+B���d�<h ��`<3>�!^_�= 3k�*�.��`� -����������� -� # ����+E3V+G3� �3������<��3�+B�<a- -�:. �30������"���X+0�<a[�7�� -�� uF������+0+E������+��S�+E3� �3��<������3B��+ ����3B���<+E30����`73���( 30������ ������ ��N2+0��:;��`���`<�*(��zn��� 3���� `�����3E�� ��0� #i���� -(. �p.�����3k�

��N�3���� ��� �*:�������+ 3���p����> M/ :;� +E3� �30��������30+"����3���+E�<a[�<�� -g�������+ ��N `��*(����db,���6`����6�.����<� �����������<+3�����+0�,����.� p����� �/F+ #� -+ ������R -+v&,�,(��R�.��3v�.:;3 3������� �3 :��;���> -+E��� Mp �� � � -`���+v��~/[� ���D30�.�,����(�(�����N �. -�����^_�

power8.C#;3����<��� M��� 30���0��� /*����(�+X��N +G3� �3������<��3�+��

Expression statement.S%���C����(������ +0������`������� 3�� �� �7uF������+E+0�����w��> -(�+D3�� -� �7u*������+0+0�����

+E3� M3���������3>� ^ 3 �7a� -�: M3���+"30�.� �7uF������+E+0����� p.:;3 (��*��+"�.��3 �d �/[� :�+0� ��N ��3�+"a- -�:����b,����+!��+! N���� ��:�����3%NL����� ��N�+E3� �3��<������3�+ #; -��(Z��� ��:��X+0�d -�i�.�0������ -� #�30�.� +E3� M3���������3

b = b * b;

-+ &,���� -+j -�;+G3� �3������<��3�+v+E3� ��03������B&V�~3��std::cin

���std::cout

M���X� uF������+0+E�����6+E3� M3���������3�+��

Declaration statement.{*:�`�� "+E3� M3���������3g����30����(.:�`��<+ !���<& #�,.82� ����3�� 3����%���������� -� � bc����+

`> -� pC� 30�.� �. -���R��Nv a� M���L �p.��R��Nv ����a[���3s���C� #����/[� ���3����"(���`�� ��� �3������ +E3� �3���������3�+

int a;

-��(

int b = a * a;

S\(���`�L ��� �3������ +E3� M3���������3 `�����+0��+E3D��NX B ��� *-,.=�,5���J!$# -��(4 `�����`��:�(������ +0������`�������y� ^_�z��:;����������� -�

power8.C#;&,�"(��> �n&%��3�� pw,.= �",cS)* � (.�<`�L ��� M3�������+>z*3����<�`> ���pC� ��N�3����"NL���0�

���

���

�����������

&V���<�0� � ��+g "3k�*�C� # & ��+j3����V�. -���c��Ni3����%���<& a� ��0�L �p.�� #� -��( �'&)(0= ��+ ��6�0a� ��:��%��Ni3k�*�C� � ��Sa- ����L �p.��R(���`�� ��� �3������ ��+,(���h �<������3%N������ -�Z� uF������+0+E�����0z;NL���V�7u; -�6�.�� #F��3c`> ��Z�*`�`<:��% �3c+E�C�<`���T.`�.L -`��<+V������[���g:�3%&V����� ��3V��`�`�:;��+ # ��3%pi���. >a[�<+B+0������L M����63��d �� �7uF������+E+0����� ���Z3���� +0����+0� 30� M3 (.�<`�L ��� M3������ -�+0� �. -+c -�Z�<h ��`<3B ��.(� a- -�:����2^ 3�+c�<h ��`<3V��+c3�� -���*`> �30�B���������0�6NL���c3���� �.�7&a- ����L �p.��% �3 +0�����% -(�(;����+0+ #F -��(d30� �/#I����� ,5*P���q� ��3 &V�~3�� 3����Va- -�:��V��N �'&)(0= #*��Ni������+0����3>�j^ 3�+ga- -�:����+ 3����V���<+0:��3������ a- -�:��B��Nn30�.�B���<& a� ��0�L �p.���� b,���B(.�<`�L ��� M3���������+ +� ���(30� B � { # � 3����Ba� ��0�L �p.����SV+ ��� 3����V`> -+0�%��NC�7uF������+E+0������+E3� M3���������3�+ #� "(���`�L M�� �3������ +E3� �3��<������3j`> ��0�0����+g��:;3j3����%�<h ��`<3

��N 30�.�"(���`�L ��� �3������ -��(������������<+X��30+,a- -�:����

Page 31: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� 8;�

Return statement.{*:�`�� +G3� �3������<��3U��+c��N�3���� NL�����

return� ��� � ��������� z

&V���<�0� �'&)(0=>�>�>���J!$# ��+V -� �0a� ��:����B^ 3B������ �*`�`<:��0+V&V��3������Z NL:��.`73������y�Vb,��� ���<3�:;��� +E3� M3���������3�<a- -�:. �3��<+ �'&)(0=�� �>���"!$# # T ����+E�.�<+ 3����ZNL:���`<3������0y + `����6�.:;3� �30������+ #g ��.(4�.:;3�+� ���<������+E����3� M3��������N �'&)(0=>�>�>���J!$# y@+ a- -�:��� �3 +E�����6e 3��<�6�C���� ��0�cg �(.(;���<+0+ 3��. �3 3����6`� -���<�!��N 3����6NL:��.`73������ `> -� -`�`<��+0+�� S%p.+E3E�� -`<3����.�DN������H3�����+0�"30��`��.����`� -���3�����+ #F&,� +0���6�.��d+� ��3��. �3X30�.�"+E3� �30��������3 =>�>��:4= #0��'&)(0=�� �>���"!$# 3��D3����"`> ����<�>�� �6�. �a[� +E����� ������ ���.� �7u� ��6� �� +0��N �� �!3���� +E3� �3��<������3

return 0;���<3�:;����+"30�.�Da� ��:��

0e_NL�����d ���� #�3����D���3��<�� �

0��N2a- -�:��

0gX3���3���� ���C�<�� �3�������+E�*+E3���� &V����`�� �. -+B`> -����( 3����

mainNL:���`<3������ ��N ��:;�X���������� �� � �����:;��� � +0:����d ��0� � ��+v3����B+E�*��3� -`73���`> - -��(d+0���d -��3���`> -;3��7����+g&,�V�. �a[�B����3E���*(�:�`���(�#F �������

&V�~3�� 3������~�c�0��L �3������.+<� bc���RT ��:;��� ���6�.�. -+0� � ��+ 3����!`�����30�� -C������"�7u*������+0+0�����.+,�.L ����� 5cW"W �

2.1.14 Details

Commenting.bc���<���d��+D �&c �� ��N,&%����30����� `�����������30+"3��. �3D ��0�����3D������~3���(=3�� �����d���������N

`���(.�-�VSV����3��7uF3V����`����+0��( p*�/*

e_+G3� ��03B��N `��������<��3'g -��(*/

e_�<�.( ��N `�����������3'g ��+V������������(p*�=3����6`����6�.����<��� b,����������3��L �2`<����������3"��N ��:;� �.�0������ -�

power8.C`���:��( -�+0� �. >a[�6pi�����

&%�0��303����� -+

/*

Program : power8.C

Raise a number to the power 8.

*/

b,�.��+ ����`��. -����+0� �d ��=+0����� :�+0��NL:� NL��� ��������<� `<����������3�+"+E� -��������� +0�<a[�<�� � �������+ ��N,`���(.��#p.:;3 3����R������p.��<� ��+ 3��. �3 �[��:(.�D����3,��������(��L �30���� ����`<�����.� � � ������V���d3����R����(�(.��%��Nn+0:�` �� `�����+E30�0:.`73������ -+R �`�����������3 �,�[��:= -�&c ��F+B�. �a[� 3��d��*��/ZNL��� 30�.� ����`����+0�����

/* -��(

*/3���pC�

+0:;�����{*�����<3������<+ #

/* -��(

*/ M���":�+0�<(ZNL���%a[�<�E��+0�����03X`�����������3�+ &V�~3������d�������+c��N�`���(.��#.���/[�R���

c = a + /* don’t subtract ! */ b;

� � (�� ����3% -(;a[�<�03���+E� 3�����+ /*����(Z��N�`��������<��3 #F�<��3����<�>�

Identifiers starting with an underscore.ARN�30����#R�0�> -��_���NL� 5cW"We`���(.� `�����3� -����+ �E��(�����3��~T �7��+ �

+E3� M�03������ &V�~3���3���� :���(��<��+0`<�����R` �. ��� -`<3��<�_#; -~3�����:.����3�����+ ��+ �.��3c ����'&,��( -`�`�����(������ 3��DQB�<T �

����3��������� b,���,3E��:;3�� ��+v3��. �3 �V�;��(0=>!�@=�,.868��>= ��+ ����3g ����'&,��( 3��":�+0�c+0:�`�� �E��(�����3���T.�<��+ �cz�30�.�7� ����V�0��+0�<�0a[�<(ZNL���c����3��7���. -i:�+0�Bp*�630�.�R`����6�.����<�>� 5 ���6�.����<��+2+0����:��(��+0+0:��R �3,��� -+E3c !&c ���������� #&V����� 3����<�(.��+0`��'a[�<�V+0:�`�� p -(���NL��������( �E��(.�<��3���T.�<� � #*p.:�3c��N�3��<�Z3����<� rG:�+E3X��<3X��3,� -+0+��

Page 32: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

8 � ������� ����� ���� �9��� �3� � � ���

������������� �� ���������

���������� ��� � ��

�������� � ���

��������� ���������

! "�#�

���#���$����� �%$��� &'� �"

����&'�

��()� ��

��������$��

�*��������� �����������

���������+�$����,��

- ������������������*.

Figure 2:�ID5#0�J, � ���J�',5*�,.#�BF����8�,.#0���J�',5*I�<�>= 8?�i, (c(I�',.= �/#;@X�/#]!$:4= { =)�>�I(0=>!�@$=�,.8

power8.CW

a :N=>� *dD ���>8�,.#0���"�h,5* �<�>= 86� , (c(;�h,.= �[# 13�����<��A�(0:4=>� *dD ��D5#0�J, � ���J�',5*_�<�>= 8?�f�/#CBc,.=)Z@$=�,.D WFl �-&`�hBG�<�>= 86�6,.=>�6B.=�,.1�#C�/#U*P� @.�c� @$=�,.D W � !.*d�"BM,.= =�!$1��

A → B,.=�� �<! S>�

=>�h,cB],5� �A

�4,5�B�)A�13����* � ��!.*d�"B *d�/# � �F�[# �V�;�R�'&)(0=>� �����J!$#M(;,.=)�b82�',.#E�V�4,5�k�V�;�

:q(c(I�>= �<�>= 8 ���f82!$=>�9@c�># �>=�,5*_�V�4,.#��V�;� * !$1b�>=Y!$# ��W

Define variables where needed!^_� 5XW W�# ��3!��+ �����*( �������<�� �g���� -`<3���`�� 3�� (��<T.���� a- ����L Mp ��

��������(��L M3�����RpC��NL���0�X��3 ��+j:�+0��( 3����,T���+G3j3�������� b,���,�0�> -(. �p.�����3k�!��Ni B�.�0������ -� ���6�����'a[��+ #���N NL��� -��� a- ����L Mp ��c3��. �3g ����C�> M��+g��� +0�����%�7u*������+0+0����� #[3����%`<���0����+E�i���.(������ (��<T.����3������ ��+j���> ��0p��6 -��(`> -� ������`�� pi�6NL��:��.( ��:.��`�/*��[�db,�.��+ ��:���(��������� ��+!��� `�����30�� -+E3 3���+0����� ��3����<�!�.�0������ -���������L -����:. -����+�zvNL��� �7u� -�6�.���#���� 5� -�2a� ��0�L �p.���+"� �a[�63�� pC��(���`�L ��0��( �3!3����6pC�<�������.���.� ��N 3����NL:���`<3������&V���<��� 3����<� ���� :.+E��(y�

The main function.b,���

mainNL:���`<3������ ��+! -� � u;`��<��3������ �2NL:���`<3������ ��� +0�7a[�<�� -2&c >�*+���AB���

� ��03���`�:�L ��n+E�C��`<�L -�3k� ��+y3��. �3 30�.�2���<3�:;��� +G3� �3������<��3 `> -� pC�j������303���(y�ySmain

NL:���`<3������!&%��3�����:;3 "���73�:;���d+E3� �3��<������3 �3 3����V����(�pC���. �a[��+ ������`<��+0����6 -+ ��NC�~3g&,��:��(�����(d&V��3��

return 0;�2bc����+

(��<T.����3������ �. -+ pC�����4�d �(.��NL��� ����+E3����0��`> -g�0�> -+0����+D����+E3���4zg��3 ��+D -�4 -�����d -�� `����6� �����( 3����3����<�gNL:.��`<30������+ e &%�.��` � &V���Fpi�V(���+0`�:�+0+0�<(�L �3��<� g7� bc���<�0��NL����� #�&,�V+E3���`�/D3��!3����X�7uF�.���`<��3 ���<3�:;���

Page 33: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� 8�8

+E3� M3���������3% ��.(� -+E/�[��:�3�� (.�D3����"+0 -�����

Using directives.^ 3%��+X�C��+E+0��p.��R3��� �a[����( -�

std::�.�0�<T;u;��+%30���0��:.��� �����! -(�(.�~3������. -C������ ��N

`���(.��# using

B.�/=>�h� ���/pw� � ^_�Z`> �+0�!��Npower8.C

#;3�����+,&,��:��(��*��/d��~/[�"����K �0������ -�H8F�

�// Program: power8.C

�// Raise a number to the power eight.

�#include <iostream >

�using namespace std;

int main()

{

���// input

� �cout << "Compute x^8 for x =? ";

���int a;

���cin >> a;

���

���// computation

���int b = a * a; // b = a^2

� �b = b * b; // b = a^4

��

��// output b * b, i.e., a^8

� �cout << a << "^8 = " << b * b << ".\n";

� �return 0;

� �}

Program 3:(0=>!�@.� �c(;!$1k��=�� :4���/#;@wW r

bc���using

(����0��`<3���a[� ��+c (.�<`�L ��� M3������+E3� �3��<������3c��N�3���� NL�����

using namespace � z

^ 3 -���M&%+%:�+V3��d:�+0�D -��NL�� �3�:;����+RN������ �. -����+G� �`��X&V��3�����:;3 ��:. -���N��*����� 3������ 3��;����:���� 3����

�����<T;uX::

�vb,����+�����`��. -����+0�x+0���<��+ �*:���30�g������.NL:�* M3�T���+E3v+E������3 #Mp.:�3���3 �. -+ +0�<a[�<�0� (��� >&Xp -`�/F+3��. �3,�����<a[����3V:�+%N��0��� :�+0������e_��<3X -����.� -(;a[�<�E3���+0�����5g ��3c���3�����+cpi�*��/i�mn�73 y@+n+E3� ��E3 &%��3��R3����j�d -rs���y(;�� �&%p -`�/i� % -����+G� �`���+y�d ��R� �a[�j c� ������ �*:�� pC�<�n��N*NL�> M3�:;����+

e_��� � ��E3���`�:�L �� # 3����6�. -����+G� �`��std

� �+ g�#�&%��3�� �L M�����6�*:�� pC�<�!��Nc�. -���<+��cin

-��(cout ����B3k&,� +0:�`��Z�. -����+ N������O3����R�. -����+E� -`<�

std�2^ 3c��+ a[�<�0�(�� � `�:��3�e -��( -�+0� ����3,(���+0���� �p.��)g

3���/F���'& -� 3�����+0� �. -����+<�RAR� 3���� ��3����<�R�. -��(�# ��3 1k!$:4* B pC�!���*�*( 3���/*�.�'&Y30�.�<� ��� ����(��<�3�� �a[����(z`���� !.��`<30+ &V��3�� 3����d�. -����+ 1b� ����30����(�:.`<��� ;��� �7u� -�6�.���#v��Nc&,�(��<T.��� Za- ����L Mp ���. -����(

cout+0�����<&V���<�0�D��� 3���� ���������� -�

add_using.C#C&,� ���� -+E/*����� NL��� 30����:;p.�� �%&%�����

&,�RL �3��7�,:.+E�R30�.�R�7u*������+0+0�����cout

#;�~3 ��+,����3,`���> �� &%���<3����<�c��3 ����NL�7��+c30� 30�.�R+E3� -��( M��( ��:;30�.:;3+E30�0�> -� #����23��!��:;� a� M���L �p.���� � �c`> -�6�> �+0����D �a[����(D3����ca- ����L Mp ��c�. -���

cout#���N `���:;��+0� #[p.:;3j&,�

Page 34: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

8�? ������� ����� ���� �9��� �3� � � ���

�d �� -`�`���(�����3� -�~�d����30�0�*(�:�`�� -����3����<�X�. -���R3��. �3V ��+0�� ����C�� ���+%����3����!�. -����+G� �`��std

�,bc���:���NL���03�:��. �3��,`�����+0� ��:.�<�.`<�%��+ 3��. �32��� +E�����c� uF������+0+E�����6��N ��:;� ���������� -� #�30�.��+2�. -��� ��������3 # !.�����NL�7�X3�� 3����RNL�> �30:��0�R&,�R����30����(.:�`��<( #�p :;3 3��D NL�> �30:��0� ��Ny3����R+� -���V�. -���%N������O3���� +G3� -��(. ���(���p��� M�0�[� � �R�d �������(�:;��+0�������3��� :.+E����� NL�> M3�:;���RN������O3���� +G3� -��(. ���(���p��� ��0� 3��. �3 &,�R(.���0y 3�<a[��� /F���M&O -��( 3��. �3 &,�d���<a[�<�D����3�����(���( 3�� :.+E��� b,���d�0��+0:��3������ +E3E�� -������pC���. �aF����� ��Nc��:;����������� -�\`> ���pC�Ra[�<�0� (.���6`�:��3,3��D30�� -`�/(��M&%�n�^_�30�.�B���0�������. -��.�0������ -�

power8.C#*3����B�. -���

coute_���c -������3����<� �. -���V -�+0� ����C�� ��������

���4�. -���<+E� -`��std

g (��*��+ ����3 `> �:.+E�Z -���z�. ���� �6&%��3�����:;3 3����std::

�*:. -���T.`> M3�������# ��3D`> -����<a[�<� �0 -`�`���(�����3� -�~� � ����NL�<�X3�� +E�����<3�������� N������H30�.� +E3� ��.(. ��0(����p��� M�0�[�$%�<�����+ 3���� +E��`�����(4(;�� �&%p -`�/ ��N

using(�������`73���a[��+�� SHL ����������������� �� `�����3� �����+D�d ����

�. -����+ # -��( ��� ����(��<�"3���/[���7� 3E�� -`�/ ��N # ��3 ��+"(���+0���� Mp ��D3��. �3 3����6�. -��� �G3�����+ ��:�+!&%���<��� �~3`�������+jN������ � ��+g��3 � ����X&,�V�. �a[�V����30���*(�:�`���(�#���� (��*��+g��3 `������XN������ "���p��� ��0�;��^_NC+0� #�N������&V����`�� ���.�>�Z����30�

using(�������`<30��a[��+ #;&,� ���+0�B3��. �3c����NL�����d �3������ #����> -������� 3��. �3,3����R���������� -�

pC��`<������+,���+0+c���> -(. �p.�� -��(Z�������R(�� � `�:��3 3�� �d �����3� ����y�

2.1.15 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g�:��.(��<�0+E3� -��(z3����dp -+0��`d+E�*��3� -`73���`> -c -��(4+E���d -��30��`> -g30�<����+ ��ND5XW W # ��� � ��E3���`�:�L �� � &qH(0=>� �>���"!$# # !>(I�>=�,5�<!$= # �>�J,5�<�>8��>#0� # *dpw,5*d: � # = pw,5*d: � # *d���<��=�,5* # -��( pw,.= � ,cS)* � z

�$g�:��.(��<�0+E3� -��(Z+E�*��3� 'uZ ��.(�+0���d -��3���`�+,��N 30�.�R���������� -�power8.C

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)gd(���+E`<����pC� 30�.� p -+0��` +E�F��3� -`<30��`> -v ��.( +0���d ���3���`� - 3��7����+V��NR5cW"W e -+B���+G3���( �pC�'a[�)g%����[��:;�X�M&%��&,����(�+% ��.(�����a[�"� u� -�6�.���+�z

ek} �$g�30���i&V���<30�.�7�V ����a[���Z`��. ��� �`<3��<�X+0� ��:.�<�.`<� ��+X -����(�����3���T.�<� zek} 8.g�30���i&V���<30�.�7�V ����a[���Z`��. ��� �`<3��<�X+0� ��:.�<�.`<� ��+X D+0���6� ��V�7uF�����<+0+0������#. -+%(��<T.����(�pi����'&szek}R?5g�T.��(���:;3c&V���<3����<�% ����a[���Z+0���6� ��V�7uF�����<+0+0����� ��+c -���a� ��:�� ���% -���Ea� -�:.��zek}"I$gd�7a� -�: M3�� D����a[�<�Z+0���6�.��B�7u*������+0+0�����+zek} P.g�&X����3��B���������� ���+ &V��3�� NL:��.`73������. -���3k� +0������L M� 3��

power8.C�

S ���[8X(+* � �'&)(0=>�>�>���J!$# ��+ �� � uF������+0+E����� &%����`�� ������ ����a[���a[�<+int

�_���3��7�� -�+ #���(�����3��~T �7��+ #�3����p.���. ��0�d�D:��3����.���`� �3������ ���C�<�� �30��� #F3����! �+0+0������������3X���i�<�� �3���� #; -��(�� �������3�����+0��+<�

2.1.16 Exercises

Exercise 1\ ���"� �]! K �V�;��K�!.*/* !$1��/#;@ � �4,.=h, � �<�>=F�L� � :u�># ��� � ,.=>�f# !.� rkt9t �"B ��#0��� { �>=)��A�,.#�B

13��DR# !.��� ek} �$g�h, identifier

�hS int��� x_i

�hB 4x__��� A99_� K _tmp

� @ T#�J� x12b

Page 35: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�� � � ���V� � � ��� ��� �����3�� 8[I

Exercise 2\ ���"� � ! KG�V�;� KL!.*/* !$13�[#;@Q�>�4,.=�, � �<�>= ��� � : ��# ��� � ,.=>��# !.� pw,5*d�"B rkt9t � &)(0=>� �>H

���"!$#0��A ,.#�B?13��D # !.��� j �>=��>Aa

,.#�Bb

,.=>�Xpw,.= �",cS * � � ! Kf��D)(I�int

W ek}"8.g�h, 1*(2*3)

�hS a=(b=5)��� 1=a

�hB (a=1)��� (a=5)*(b=7)� K (1

�"@ (a=b)*(b=5)�<� (a*3)=(b+5)

Exercise 3 � �h�>�"B � KL!$=6,.#ID]! K �V�;�Xpw,5*P� BM�'&)(0=�� �>���"!$#0� DN!$: �4,.p��X�"B �>#0��� { �hB �/# ^ &`�>=��>����� �13�;� �V�;�>= �V�;�>���Y,.=>� *Ppq,5*P:u� ��!$=X= pw,5*d: � ��A�,.#�B2�'&)(+*-,.�/# D`!$:4=�B ���>�/���J!$#0� W ek}R?5g

Exercise 4 � � �<��= 86�/# ���V�;� pw,5*d: � �?! K �V�;� pw,5*P� B]�'&)(0=>� �����J!$#0�FD`!$:U�4,.p�� � B �>#0��� { �'B��[# ^ &qH�>=>������� �cAb,.#�B2�'&)(+*-,.�/# �;!$1 �V�;� ���Xpw,5*P:u� � ,.=>�6!�S)�J,.�[# �hBcW ek}"I$g

Exercise 5\ = �/�<�9,b(0=>!�@=�,.8

multhree.C�V�4,5�_=>�h,cB5�b�V��=>�h� �[#0�<�"@c�>=)�_K�=�!$8 �>�J,.#�Bc,.=�B9�/#�(0:4�

,.#�B !$:4� (0:;�V�9�V�;�>�/=k(0=>!�B.:u� �JW ek} P.g

Exercise 6\ = �/�<�G, (0=>!�@=�,.8

power20.C�V�4,5�b=>�h,cB5�?,.# �/#0�<� @c�>=

aK�=�!$8 �>�J,.#�Bc,.=�BG�/#�(0:4�

,.#�B !$:4� (0:;�V�a20

:;�h�/#;@G,5��82!.��� { p��986:;*P���T(+*d�J�',5���J!$#0�LW ek} P.g

Page 36: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

8�P ������� ����� ���� �9��� �3� � � ���

2.2 Integers������� ���h� ���J!$# B.�/���>:4�>��� � �V�;�6��D (I�>�

int,.#�B

unsigned intKL!$=6=>�J(0=�� ���>#0���[#;@

�[#0�<�"@c�>=)� ,.#�BY#�,5��:4=�,5* #I:N8�S��>=)��A =>� � (I��� ���[p�� *dD`W�� !$:213�/*/*u* �',.= #U�;!$1 �<!G�>pw,5*d:;H,5�<�F,.= �/�V��82� ���"� �'&)(0=>� �����J!$#0� !$pw�>= S>!.�V� ��D (;� �LW�� !$:G1���*[*_,5*P��! :4#�B ��=)�>�J,.#�BY�V�;�*d�/8Y���J,5���J!$#0� ! Kf�V�;� �L� ��D)(I� ��A�,.#�B��7=>�>* ,5�<�'BR�<!?�V���/���O�;!$1 �V�;���/= pq,5*P:u� � �h,.#ES��=>�"(0=>� ���>#0�<�'BG�/#U�V�;�Y��!$89(0:;�<�>=�� �98��>82!$= D W

$%�<��� ��+R��:;� ���7uF3!5cW"W|���������� �� �"^ 3 �+E/F+R3���� :.+E�<�R3�� �����.:;3R 63����6�i�<�� �3�:;���!��� (������0����+5 ���+0��:�+ # -��( ��:;30�.:;3�+X3���� ����+0:��3%��� (�����������+ � -�;���<�.�����~3>�,bc��� `<����a[�<��+E����� ��+%(��<T.����(Zp*� 3����NL�����'&V���.� NL���0� :�L *�

QB�������<��+ � -�;������������3=

9 �QR�<��������+V5,���+0��:�+

5+ 32.

�// Program: fahrenheit.C

�// Converts temperatures from Celsius to Fahrenheit

�#include <iostream >

�int main()

�{

// Input

std::cout << "Temperature in degrees Celsius =? ";

���int celsius;

� �std::cin >> celsius;

���

���// Computation and output

���std::cout << celsius << " degrees Celsius are "

���<< 9 * celsius / 5 + 32 < < " degrees Fahrenheit.\n";

���return 0;

� �}

Program 4:(0=>!h@.� �.KL,5��=��>#0�;�>���JW r

^_N!�[��: 30�0����:;33���� ���������� -� ��� 3���� ���;�.:�3��N��'I (�����������+ 5,���+0��:�+ #%�[��: &%���B���<33����NL�����'&V���.� ��:;30�.:;3>�

15 degrees Celsius are 59 degrees Fahrenheit.bc����+ ��:;30�.:;32��+v�.�0�*(�:�`���( &%����� 3����,�7u*�.�0��+0+0����� +E3� �3��<������3 ���D�������+c��? � �'IV��N 30�.� ���������� ��

��+c�7u;�<`�:;3���(y�g$X�<���"&,� NL�*`<:.+X����3���� �<a� ��:. �3��������N�3����" �����3������<30��`V�7u*�.�0��+0+0�����

9 * celsius / 5 + 32��� ������B�'I*� bc����+v�7u*������+0+0����� `�����3� -����+ 3���� �������d M�0�!� uF������+0+E������+

9#5#32#[ -��(

celsius#�&%���<���

celsius��+ !a- ����L Mp ��%��NC3k�*�C�

int�jb,����+ NL:���( �������3� �.3k�*�i�B��+ �����B��NC3���� ,.= ���V��8�� ���J�f��D)(I� �

��� 5XW W �

Page 37: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� 8[o

Literals of type int. 9#5 -��(

32 ����R(���`����d - ���3��<�� -�+ ��Nn3s���C�

int#F&%��3��d3��������,a� ��:���+,���������

(��L �3��<�� ���� M������3��jQB��`<���d -;���30�<�� -�+2��NC3k�*�C�int

`�����+0��+G3 ��Ny !+0� �*:�����`��R��NC(�������3�+2N������03��

9#

&V���<�0�%3����VT���+E3 (�������3j�D:.+G3 ����3 pC�0�2b,�.�Xa� -�:.�%��N "(.�<`����d -.���3��7�� -���+g3����B(���`����d -��*:��Dpi�<�

���<�����<+0����30��( p*� 3���� +0� ��:�����`��6��N (�������30+�� b,���<��� ���� ���Z���3��<�� ��+BNL��� �����[ �30��a[� ����3������7��+�� x2��:`> -�����<3Xa- -�:��

−9p��d&%����30�����

-9#;p.:;3c30�.��+c��+% `����6�C��+0�~3��V�7u*�.�0��+0+0�����Zp.:����3,N��0���\30�.� :��. ��0�

+0:;p�30�� -`73����������i�<�� �3����kek{*�<`<3������ �*� �*�@?5g -��(�30�.� ���30�<�� -9�

2.2.1 Associativity and precedence of operatorsb,�.��<a- -�:. �3������z��NV ��4�7uF�����<+0+0����� ��+ 3��= � �������7uF3��<��3 ���Ma[�<�0�.�<(4p*� 3���� ,5�>�L!�>�",5���[p�����"� � -��( (0=������'B �># ���>� ��Nc3��������a[���a[��( ���C�<�� M3�����+�� ^_� +0�����03 # �+0+0�*`<�L �3���a*��3����<+ -��( �����<`���(�����`���+(��<3��<�0��������3���� �������`> �X� �������3�����+0��+���� -���7uF�����<+0+0������3��. �3d��+�����3 #c���d���.~� ����`����6�.��<3��<�� #� �������3�����+0� � ��(y� � � �. �a[� -����� -(;�z3���:�`�����( �+0+0�*`<�L �3���a*��3k� ���w`������.�<`<3������4&%��3��43���� ��:;30�.:;3���C�<�� �3����c��� {*��`73������ �*������� �*�5XW WO -���'&V+R����`����6�.��73������ �������3�����+0� � �<( �7uF������+E+0������+"��� ����(��<� 3�� +0 >a[� � M������30�.�<+0��+ M3

��p*a*����:�+ � � -`���+�� b,����+ ��+D���/[� ���z�d �3������d M3���`�+ # &V���<���d&,�&X����3��3 + 4 � 5

&V����� &,� ���> -�3+(4 � 5)

�v� �% -�+0� &%����30�3+4+5

#F�7a[����3�����:.��� ��3g��+j����3 B������������`���> ��g&%���<3����<�23�����+j���� -��+(3+ 4)+ 5

���3+(4+ 5)

�2$%�7��� #�30�.�jrG:�+E30��T.`> �3������ ��+j30� M3 -(�(���3������ ��+ ,5�>�L!�>�",5���[p�� #�+0� ��3g(.����+����3%�d M303��<� &%�.��` �a� M���L -��3X&,� ���> -�y�bc���%������`��X3�� � >� NL��� ��<+0+j� ����<��3�����+0�<+ ��+j30� M3j&,�X� �a[�%30�!/F���'& 3���� * !�@�J�h,5* � ����<��3�����+0�<+��

�g:;3 3�����+ ��+c ���*(��<�� �3��%������`<� #;+0����`��V3����B3k&,� ��:����+ 3��. �3c ����B:�+0�<(Z����+E3 N���� �*:�����30�� ���� �*:���30�����3�:���3���a[�� ��.( �> -+G� 3�� �0������� pC�<�>� SV�+E� # 30�.�7���d��+ -�&c ��F+ 30�.�d����3������ ��Nc�7uF�.���`���3��� -(�(������� �������3�����+0��+!��� `> -+E� �[��: ����6����3"+0:;��� &%�.�7��� 3����65XW WH+0�<�d -��3���`�+B&V���v�.:;3"30�.�<� ��mn�73 :�++E3� M�03j&%��3�� 3����c3k&,�"��+0+0����3��L -���:����+2NL���g �����3������<30��` �7u*�.�0��+0+0������+ #� -��( 3������ (.��+0`�:�+0+j30�.�c�������<�� ��.��`<3�:;���-�

Arithmetic Evaluation Rule 1:��:��3����.���`� �3���a[�X���C�<�� �30����+X�. �a[� �.�����.�7�X������`<��(�����`��"3��. -�

-(�(���3��~a[�B���C�<�� �30����+��

b,�.�"�7uF�����<+0+0�����9 * celsius / 5 + 32

����a[���a[��+,3����!�D:��3����.���`� �3������ ���C�<�� �30���*#;3����"(���a*���

+0����� ���C�<�� M3����/# -��(=3���� -(�(���3������ ���C�<�� M3����

+�DSV�v3��;���<� ��0�Dp.���. ��0� ���C�7�� �3�����+<� ^_� 5XW W

-+ ��� �d �3������d M3���`�+ #y3������D:.~3����.���`> M3���a[� ���C�<�� �3�����+* -��(

/�. �a[� ���[@.�;�>= ������`���(�����`��d3��. -�

3���� -(�(.�~3���a[�����C�<�� �3�����++ -��(

-� � � -�+0� +� �� 3��. �3D� :��3��~� ���`> �3��~a[�D���i�<�� �3����0+ S>�/#�B �������

+E30�0���.��~� 30� ��w -(�(.�~3���a[����.�<+���� bc����+ ���> -��+ # ��:;� �7uF������+E+0����� `�����3� -����+ 30�.� �������`> �,� ��0��� �3�����+0�<+

(9 * celsius / 5) + 32� ��3 ��+ Z`����6�C��+E��3�� � uF������+0+E����� p.:����3!N������e3����d -(�(���3������

���C�<�� �3����X -��(Z��3�+,���C�7�� -��(�+9 * celsius / 5

-��(32�

Arithmetic Evaluation Rule 2:�g���. ��0� ��0��3������<3���`%���C�<�� �30����+c ����!���N�3X -+0+0��`��L �3��~a[�-�

^_� �d �30�.�<�d �3���`�+ #���3n(��*��+ �.��3 �d �3030�<�y���M& 3����2+0:;p �_�7uF�����<+0+0�����9 * celsius / 5

��+y� �������3������+0� � ��(y���g:�32��� 5cW"W #��~3 ��+v(����.�,N������ * ��K>���<!X= � @.�c� #�3��. �3 ��+ #�3���� 3k&,�R���N�3�����+E3 +0:;p �_�7uF�����<+0+0������+��� �� � �������6�� ��? �!'����D� 9�������;�� �'������ >� �� C �(��� � ���������:9 �� �� ��� ����D���? ��'#�������# � �������� �������:9 �� �@���

� ����� �� �# � ����? � :>� � $&�=���&D��� ���:�������� % � ���:G

Page 38: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

8�# ������� ����� ���� �9��� �3� � � ���

����B���0��:��i��(30�����<3����<�>�2b,�.��+ ��+ `�����+0� ��:�����`��"��Ny3����BN -`<3 30� M3 3����Vp ��� M�0�� ��0��3������<3���`c���C�<��� �3����0+V ����"(��<T.�.�<(Z3�� pC� * ��K�� -+0+0��`��L �30��a[��� b,��� �7uF�����<+0+0�����

9 * celsius / 5��+X30�.�7����NL�����

�������`� -���B� ����<��3�����+0� � ��( -+ (9 * celsius) / 5#� -��( ��:;�v����������� ���7u*������+0+0�����D�. -+ 30�VpC�g���> �(

-+

((9 * celsius ) / 5) + 32

Logically parenthesizing a general expression.} �~a[��� -�w�7u*������+0+0����� 3��. �3�`<���.+E��+E3�+d��N +0���

�*:�����`��!��Nv���C�<�� �30����+V -��( ���C�7�� -��(�+ # &,� &c -��3X3��6(���(�:�`�� 3����!�������`> -C� �������3�����+0��+��� ;���B�> -`�����C�<�� �3����6���w30�.��+0� �*:�����`���#X&,��/*�.�'& �~3�+6 ��0��3k� e_�����Z���63k&,�5g�# 30�.�Z�����<`���(�����`��Me =��:��DpC�7�pC�<3k&,���<� �% -��( �># #�+0���Rb� �p.��Vo!���5,�. ���3��<�gSbg�#� -��(d��3�+ �+0+0�*`<�L �3���a*��3k� e_���N�3g���g��������3'g7� ^_��`� -+0���N :.�. ��E�����C�<�� M3���� #*3���� -+0+E�*`��L M3���aF�~3s� +E�C�<`���T.��+ ��� &%����`��+E��(�� ��Ny3����B���C�<�� �3����,��3�+ ���i�<�� -��(��+,3�� pC�!NL��:���(y�mn�73,:.+,`�����+0��(.�7� 3����BNL�����'&V����� �p.+E3E�� -`<3,�7u; -�6�.��X30�D�<�6� �. -+E� � �%3��. �3 &%�. �3 &,�B(�� ���<�0�B��+

`����6�.��<30������������<�� -n -��(Z����3c�0��+E30����`<3���(�30�6 ����~3������<3���`V� uF������+0+E������+��

�7u*�.���x1

���1 x2

���2 x3

���3

���4 x4 ����~3s�

2 2 2 1������`��4 13 13 16 -+0+E�*`��r l l r

$%�<��� ��+V���M& 3����!� �������3�����+0��+ ����!��p.3� -������(�� NL���R�> -`�� ���C�<�� �30��� # &,� ��(.�<��3���N�����3�+ * �',cB.�/#;@���C�<�� -��( #.(��<T.����( -+X30�.�!���N�3V�. -��(Z+E��(�� ���C�<�� ��.(�NL���B���N�3V -+0+0��`��L �3��~a[�"���C�7�� �3�����+ # -��( -+c3������������3%�. -��(Z+E��(��!���C�<�� -��(Z��3����<�0&%��+0���gbc���"�0:.��!NL���%T.��(������D30�.��+X���C�7�� -��(Z��+X����a[����pC�<��M&!� ^_�`> -+E����N,p.���. ��E� ���C�<�� �3�����+ # &,��:.+E�d -����3����<� ��:��� 30�ZT ��( 3���� ���h��!$#�Bc,.= D ���i�<�� -��(�#�3����������3�� 30�.�"��3����<�V+E��(��!��N 3����!��> -(������ ���i�<�� -��(y�g� �"3������Z�.:�3V D� -���X��N�� ����<��3�����+0�<+R �����:���(�3����+0:;p.+0� ��:.�<�.`<�!`����0�0��+E�C����(������D30� 3���� ��> -(������ ���C�<�� ��.(�#F3���� +0��`�����(. ��0����C�7�� -��( e_��N -��� g�#� -��(3���� ���C�<�� �30���X�~3�+0���N �bc��� ��> -(������V���C�<�� -��( NL���v���

i

��+ 3���� 8G,�&5�/8G,5*N�h:uS)��� � : ��# ���i! K �>* �>8��>#0�V���<!f�V�;��=>� * �>pw,.#0���� B � �V�4,5�R��!$#0�J,.�[#0�

no!>(I�>=h,5�<!$= ! K

lower(0=������'B �># ��� �V�4,.# ���

i

� ^_����:;� �7u� -�6�.���#g3������> �(.���.� ���C�<�� -��(���NC���

3

��+230�.�%+0:;p +E� �*:�����`��x2

���2 x3

3��!30�.�%���N�3 ��N ���3

#�+0����`��X�.�!���C�<�� �30������ 30� M3j+E:�p.+0� �*:�����`��B�. -+ �.�0��`���(�����`��V��M&,�<�23��. -�

13#�p.:;3g� uF3�����(������"30�.�c+0:;p.+0� ��:.�<�.`<�%3��!���

1&,��:��(����.`<�:�(.� -�����C�<�� �30���X��Nn������`���(�����`��4�

bc��� +0��`�����(. ��0� ���C�<�� -��( NL��� ���i

��+d3���� 8G,�&5�/8G,5*s��:uS ��� � :u�># ���Q! K�� * ��82�>#0�V� �<! �V�;�=>� * �>pw,.#0� ���"B � �V�4,5�

only��!$#0�J,.�[#0�G!>(I��=�,5�<!$=)�R! K

higher(0=>�h���hB ��# ��� �V�4,.# ���

i

�!SV`<`�����(������3��D3�����+,(.�7T ����30������#*3����"+E��`�����(. ��0����C�<�� ��.(���N����

3

��+c���4 x4

������:;�%� u� -�6�.����$%�<��� ��+V3����!3� �p.�� NL���R��:;�R�7u; -�6�.�� ��[ -����# �<�.�. -��`��<( &%��3��Z3���� +0:;p.+0� ��:.�<�.`<��+"��N2 -��NL��:;�

���C�<�� �3�����+,3��. �3X ����R�.:�3X���� M������30�.�<+0��+V �`�`�����(������ 3�� 3����R��:����+ rs:.+G3%(���+0`7����pC��(y�

Page 39: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� 8�q

�7u*�.���x1

���1 x2

���2 x3

���3

���4 x4 ����~3s�

2 2 2 1������`��4 13 13 16 -+0+E�*`��r l l r���

1 ( x1

���1 x2

���2 x3

���3

���4 x4 )���

2 ( x2

���2 x3 )���

3 ( x2

���2 x3

���3

���4 x4 )���

4 (���

4 x4 )

X�'&�&,�X+0���6�.�� �.:;323������<3����<� -�;� �������3�����+0��+2&,�%�. �a[�%��p�3� -������(�#�3� �/*����� 30�.�<���g�D:��3����.���`����3�����+,����3�� -`�`<��:.��3>�j^_�Z��:;�%�7u; -�6�.��V&,� ���<3X30�.�"�7uF�����<+0+0�����

( x1

���1 (( x2

���2 x3 )

���3 (���

4 x4 ))).

�j�D+0�����c�d -����` #-30�.��+ &,���E/[��(���:;3 #� -��( &,�X�. �a[�V RNL:���� � ����<��3�����+0� � ��(6�7u*������+0+0�����?e 3����c��:�30�<�� -��� ��Nj� ��0����3�����+E��+!`> ��=pC�D(��0���.�i��( -�[ �����#n��Nj`���:;��+0�)g � �g:;3 ����3��D30� M3 &,�D`> -������3"�7uF�C�<`<3+0:�`�� ����`��RpC���. �aF�����c��� �������<�� -_�j5 ����+0��(��<�c3����"NL�����M&%�����D� u� -�6�.����

�7u*�.���x1

���1 x2

���2 x3 ����~3s�

2 2������`��13 13 -+0+E�*`��r l���

1 ( x1

���1 x2

���2 x3 )���

2 ( x1

���1 x2

���2 x3 )

b,�.�R����+E:.~3������D� ��0����3�����+E� � ��(Z� uF������+0+E����� ��+

(( x1

���1 x2

���2 x3 )),

&V����`��w(��*��+�����3�+G�C��`���N��z3���� ����(��<����� &V����`�� 3���� ���C�<�� �3�����+� M����3�� pC�Z�7a� -�: M3���(y� ���. �3`�������+j3�� ��:;� ����+0`<:.�R��+j3��. �3,5cW"Wx���.~�6 -���M&%+g�7u*������+0+0�����.+ NL���g&V����`���3����V�d -����`,&,���0/F+ ��:;3��b,�.�R�����<a*����:�+,p -(`> -+E�"��+,���6�i��+0+0��p.�� #�NL���X�7u� -�6�.���#*+0����`��" -� p ��� M�0�����C�<�� �3�����+,��N 30�.�R+� ����������`��<(.�<�.`<� -�+0�D�. �a[�"3���� +� -��� -+0+0��`��L �30��aF��3k�[�

Identifying the operators in an expression.b,���<��� ��+d���.� ��+E+0:�� &,� �. �a[���0y 3(���+0`�:�+0+E��( �[�<3 #

�. -������ 3��. �3 B.� �i�>=��>#0� 5cW Wx���C�<�� �3�����+j�d >� �. �a[�%3���� �L,.8�� 3���/[���y�� ;��� �7u; -�6�.�� #-`> -��pC�

Dp.���. ��E� ���i�<�� �3����V -+%���3 - 4

#.p.:;3V�~3%`> �� -�+0� pi� :��. ��0� ���C�<�� �3����% -+V���-5� ������`�� ���.�

��+c���> -��3X�D:�+E3cpC�"���.NL�7�0����( N������H3����"`<����3��7u*3>� �%+E: ���� #*3�����+c��+c`���> M� #. -��(Z���Z`> �+0��+X&%���<���!�~3��+c����3 #;��3c��+,�.�0��p Mp ~� D�����*(���(.�� 30�6 -(�(Z+0�����R�7u*30�� � �������3�����+0��+c3�� �d �/[�B3���� �7uF�����<+0+0������������B���> �( Mp ��9e +0��� ��+0� 3����!QB�<3� ����+,+0��`<30����� pC�<��M&�g7�mn�73 :�+ `<���.+E��(��<�6 ��.��30�.�7� `<���.`7���<3�� �7u� -�6�.���#23�����7uF�����<+0+0�����

-3 - 4� ^ 3D��+ `<��> ��D3��. �3

3���� T���+E3-�D:�+E3BpC�D:.�. ��E� e 3����<��� ��+R������<N�3"�. -��( +0��(�� ���C�<�� -��(Ng�#i&%�.���� 3���� +0��`�����( ����� ��+

p.���. ��0�6e 3����<���R ��0�V���C�<�� ��.(�+ ���dpC��3���+0��(.�<+ g7� �g:;3,��+g3�����+ � uF������+0+E����� �������`> -�~�D� ��0����3�����+E� � ��(

Page 40: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

?[] ������� ����� ���� �9��� �3� � � ���

-+-(3 - 4)

#[���j -+(-3) - 4

�Z{*����`��,&,�c���73j(���h �<������3ja- -�:���+ ���DpC��3��D`> -+0�<+ #�&,�,pC�<3E3��<�2�d �/[�+0:;��� &,� /*�.�'&)3����! ��.+G&,�<�>�SV`�`����0(.���.�3�� b Mp ���� #n3���� :��. ��0�

-�. -+!������`��<(.�<�.`<�

16 -��( ��+R��������3 �+0+0�*`<�L �3���a[�-��bc���

p.���. ��0�-� �+ �.�0��`���(�����`��

13 -��( ��+ ���N�3 -+0+E�*`��L M3���a[����bc��:.+ #�3���� :.�. ��E�

-p ���.(�+ ������� +E30�0���.��~� #

-��(6&,�V�7u*�C��`<3g3�� ���<3 30�.�X�������`> ��� ��0����3�����+E��+(-3) - 4

� ^_��(�����(�#; M�.�.��*����� 30�.�X��:����+ MpC�Ma[��F�����(�+

�7u*�.���− 3 − 4 ����~3s�1 2������`��16 13 -+0+E�*`��r l:��. ��0� �

( − 3 )p.���. ��0� �( − 3 − 4 )

bc����+c����(�:�`���+,3����"�������`> -i� �������3�����+0��+

(( − 3) − 4),

+0� 3����%a- -�:��V��NC3����V�7u*������+0+0�����-3 - 4

��+−7�2bc����+ ���~a[��+ :�+g3����V3�������(�����+E3g���6�C���03� -��3 ��:���

NL���% �����3������<30��`V�7u*�.�0��+0+0������+��

Arithmetic Evaluation Rule 3:�%�. ��0�d���C�7�� �3�����+%W -��( �g�. >a[� ���������<�c�.�0��`���(�����`�� 3��. -�

3������~�cp.���. ��E�d`���:���3��<�E� M�03�+��

�%+0�����9e_�7u*� ���`���3'g � ��0����3�����+E��+ -+2���9 * (celsius + 5) * 32

������`<��(�����`���+ `> �� pC�c�Ma[�<�����:����(y�db�� ���<3!30�.� �������`> - � ��0����3�����+E��+ NL��� +0:�`�� � ��030�L -����� M������30�.�<+0� � ��( � uF������+0+E������#�&,� ����.��63����B��:����+,N������H �pi�Ma[� #;`<���.+E��(��<������� 3���� -����> �(���� ��0����3�����+E� � ��(� M�03�+c -+,���C�<�� ��.(�+��2^_�3���� �7u� -�6�.���#*3�����+,��> -(�+,3�� 30�.� �������`� -i� �������3�����+0��+

(9 * (celsius + 5)) * 32�

2.2.2 Expression trees^_� -���=����� �_�������d M�0� �7u*�.�0��+0+0������#�30�.� �������`> � � M������30�.�<+0��+ (��<3��7���������D :���� �*:�� �G3���� � ��<a[�< ����C�<�� �3���� # �. -���<�� 30�.������� 30� M3 ����C�> ��0+!&V��30�.��� �+0�d -����+E3"�*:��Dpi�<� ��N � �������3�����+0��+�� b,����7u*�.�0��+0+0�����U��+ 3������) `����6�C��+0��30� � uF������+0+E������#Rp.:����3N������ 3���� 3���� �_��<a[��"���C�<�� �30���Z -��(U��30+���C�<�� -��(.+,3��. �3X ����" -�[ -�����7u*�.�0��+0+0������+��bc���,����`�:;��+E��a[�X+G30��:�`<3�:;���c��Ni -� �7uF�����<+0+0�����6`� -� ����`��<�� pC� aF��+E: ��� � ��(D���D3����cNL���0�t��N -� � &qH

(0=>� �����J!$#G��=>�h� �g^_� �����:;���c8 #�3���� �7u*������+0+0����� 30���<�cNL��� 3���� �7u*������+0+0�����9 * celsius / 5 + 32��+c+0���M&%�y�

$%�'& (���&,� ���<3B3�����+%30�0���'�zb,��� �7uF������+E+0����� ��3�+0���Nv(.�7T ����+V30�.� =�!!.� ��Nv3���� 30�0��� #y -��( 3�������C�<�� -��(.+g��Ni3����%3���� � ��7a[�� ���i�<�� �3����jpC��`������c3����%������3 y@+ � ����*-B.=>�># ���630�.�X30�������212 -`�� ���i�<�� -��(3������w+0�<�Ea[��+d -+ 3������0�*��3���NR -����3����<� +0:;p�30�����������.�<�w&,� ���> -`�� �������d ��0� � uF������+0+E������#c�~3(��<T.����+% * �h, K ����3���� 3E����� #;&V�~3������ NL:;�030�.�7�%`������(;�����y�

Page 41: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� ?��

9 celsius

5

32

9 * celsius

(9 * celsius) / 5

((9 * celsius) / 5) + 32

* / +

� � � �

Figure 3: � # �'&)(0=>�>�>���J!$#���=>�h��KL!$=9 * celsius / 5 + 32

,.#�BX�/�V��* !h@$�J�',5*q(;,.=>�>#0�V�����5,5���J!$#((9 * celsius) / 5) + 32

W � !LB � � ,.=��F*-,cS>� * �hBfKh=>!$8 !$# � �<!R�L�>p��>#�W

2.2.3 Evaluating expressions F����� -� �7uF�����<+0+0����� 30�0��� &,� `> -� �> -+E���� ���> �( ��h 3���� �C��+0+0�~p �� �>pq,5*P:+,5���J!$# ��� � : ��# ��� � NL���3���� ����~3������<3���`d�7u*�.�0��+0+0�����y�){*:�`�� +0� �*:�����`�� `<����3� -���.+6 -�%+E:�p �_�7uF������+E+0������+��*`�`<:��E������� ���3���� 30���<� #i����(��<���<( p��Z3��������X3������!��N �<a- -�:. �30�����y� ;���B3�����+X+0� �*:�����`�� 3���pC�"a� -���(�# &,� �. �a[� 3���d �/[�D+0:;��� 3��. �3 &,�6�<a- -�:. �30�6 -� � uF������+0+E����� ���.~� , K��<�>= 3���� �7u*������+0+0�����.+!`����0����+G�C����(.���.�3��,5*/* �~3�+X`������(;���<���. �a[�"pC���<� �<a� ��:. �3���(y��j�������/F�����D �3 �����:;���!8 #�30�.��+cpC�<`�������+,`���> M� �2pi��NL������<a- -�:. �3����.�

9 * celsius#C&,�D�. >a[� 3���<a- -�:. �3��

9 -��(

celsius# ��3����<�E&V��+0��#i&,� (����0y 3 �. �a[�

������:����Z����NL�����d �30�����63�� �i�<��NL�����\3����"�7a� -�: M3������y����.�<� &,�% �+0+0�*`<�L �3�� 3����c�<a- -�:. �3������D+0� ��:�����`��c&%��3�� 3����X`<���0����+E�i���.(������R+0� ��:�����`��%��N �.��(���+

��� 3���� 30������#� %a- -���( ���*(�� +0� �*:�����`�� �<!>(I!.* !h@$�J�',5*/*dD ��!$=)�V� 3���� 30���<��� bc����+v���� -��+�3��. �32 -��� ���*(����� 30�.�c+0� ��:�����`��V�*`<`�:;��+g������D -N�30�<� -�;��3�+2` �����(��0���6�. �a[�%�*`<`�:;�0����(y� ^_� �����:��0�V8 #[NL��� �7u; -�6�.�� #3���� ���*(��"+0� �*:�����`��

(1, 2, 5, 3, 6, 4, 7)����(�:�`���+B a� -���(Z�<a- -�:. �3������Z+0� ��:.�<�.`<���%SV+E+0:��������D3��. �3

3����Xa- ����� �p.��celsius

� �+ga� ��:��15#[&,�%��p�3� -��� 3����%NL�����M&%����� �7a� -�: M3������6+0� �*:�����`����3e ^_���> -`��

+E3��7� #;3���� +0:;p � �7u*�.�0��+0+0�����Z30� pC� �<a- -�:. �3���( ���7uF3%��+,�d ��0/[��(p*�� D+0:;�0�0��:.��(������ pC�'ui� g

9 * celsius / 5 + 32 −→1 9 � celsius� I W 8 �

−→2 9 * 15� I W 8 �

−→5 135�

5W 8 �

−→3 135 / 5W 8 �

−→6 27W

32

−→4 27 + 32

−→7 59bc���+0� ��:.�<�.`<�(1, 2, 3, 4, 5, 6, 7)

��+ ��.��30�.�7�Da- -���( ����(.�d+0� �*:�����`�� #j����(.:�`����.� Z(���h �<������3

Page 42: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

? � ������� ����� ���� �9��� �3� � � ���

�<a- -�:. �3�������+0� �*:�����`���z�30�.�B���<+0:��3������ a- -�:��B��N59��+ 3����B+� -�����2b,���<���R ����R�D:�` �d�������%�<a� ��:. �

3�������+0� �*:�����`��<+ #C��Nv`���:;��+0� # -��( 3���� 5cW"W�+E3� -��(. ���( (��*�<+V����3%������+0`7����pC�!&%����`�� ���.�"��+%3�� pC�:�+0��(y�

2.2.4 Arithmetic operators on the type int

^_� 3����6�.�0������ -�fahrenheit.C

# &,���. �a[� -����� -(;� ����`���:���30�<����( 3����6p ��� M�0� �D:��3����.���`� �3���a[����C�<�� �3�����+

* -��(

/# -+%&,���� -+X3����"p.���. ��0�� -(�(���3������ ���C�<�� �30���

+�X^ 3�+%��p�aF����:�+%`<��:.��3��<�0� ��E3V��+

3����Rp ��� M�0�d+0:;p�30�� -`<30���������C�7�� �3����-�

b �p.���� ���+E3�+% �����3������<30��`R���C�<�� �30����+se -��( 3���� (��<���~a[��( ,5�����[@$#I8��>#0�i!>(I�>=�,5�<!$=)� gc3��. �3R M��� �a� ���L �p.��XNL��� 3����V3s���C�

int#*&V��30�63��������, ��0��3�����+ #�������`��<(.�<�.`<��+% ��.( -+E+0�*`��� �3���a*��3�����+<� b,�.�R �`<3�:. -

�*:�� pC�<��+c3��. �3B M�.�i�> ��V���Z3����"������`��<(.�<�.`<� `����:���� ����!�.��3X������7a� -��3 � ��3%��+X3���� !$=�B �>= -�������������`��<(.�<�.`<��+%3��. �3c�d �3030�<��+��

Description Operator Arity Prec. Assoc.�C��+E3 �_����`<����������3

++� �'o ���N�3

�C��+E3 �_(.�<`<����������3--

� �'o ���N�3�.�0��� ����`<�0��������3

++� �>P �0������3

�.�0��� (���`<�0��������3--

� �>P �0������3+0�����

+� �>P �0������3

+0�����-

� �>P �0������3� :��3��~� ���`> �3������

*� ��? ���N�3

(.�~aF��+0������e_����3������7�'g/

� ��? ���N�3���*(�:��:�+

%� ��? ���N�3

-(�(.�~3������+

� �>8 ���N�3+0:;p.3E�� -`<3������

-� �>8 ���N�3

� :��3c -+E+0������������3*=

� ? �0������3(.�~a� �+0+0������������3

/=� ? �0������3

���*( -+0+0������������3%=

� ? �0������3 -(�( -+0+0�����.���<��3

+=� ? �0������3

+0:;p -+0+0�����.���<��3-=

� ? �0������3

Table 1: � = �/�V��82� ���"� ,.#�B B �>= �/pw�hB ,5�>��� @$#I82�>#0��!>(I��=�,5�<!$=)� K�!$=f�V�;�f��D)(I�int

W ^ , � �R�/# �>=�� H82��#0� !$= B ����=>�>82��#0�b!>(;�>=�,5�<!$= �'&)(;��� �V�X,.# *Ppw,5*d: �LWY���;�9��!$8X(;!.�����<�F� &)(0=>� �>�h�J!$# �/�,.#�*Ppw,5*d: � �[(0=>�>H"�/# ��=>�>82��#0� ,.#�B (0=>�>H'B ����=>�>82��#0� A !$=X,.#G= pw,5*d: � �[(I!.�>�VH �/# �>=��>82�>#0�,.#�B (I!.�>�VH B ���>=>��82�>#0� W ^ , � � ,5�>�h�[@$#I8��>#0��!>(;�>=�,5�<!$=]�'&)(I�h� �V� ,.#O*dpw,5*d: �M,5�R* �/K>�!>(I�>=h,.#�B ,.#�B ,.# = pw,5*P:u� ,5��= � @.�c�?!>(I�>=h,.#�B��R�V�;�U��!$89(I!.���/�<���'&)(0=>� �����J!$# �/�],.#*dpw,5*P:u��W � *[*m!.�V�;�>=?!>(;�>=�,5�<!$=)�X�[#Ip�!.*dp�� = pw,5*d: �>��!$#0*dD ,.#�BR�4,.p��X# !2���i�h� �V�LW

mn�73 :�+ (���+0`�:�+0+ 3����dNL:.��`<30�����. -���3�����+ ��N,3�����+0����C�<�� �30����+ ��� 3�:;����# &V���<���*#+ -��(

- ����

+0���N�� �7u*� � -�. �3����0�[� �g:;3V �����> -(;��3���� (���aF��+E����� ���i�<�� �3����,��� �*:�������+X (.��+0`�:�+0+0�����y�

Page 43: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� ?[8

The division operator.SV`�`����0(.���.�3���3����D��:����+ ��N �d �3������d �3���`�+ # &,� `���:��(=���<�.L �`��D30�.� �7u �

������+0+E�����

9 * celsius / 5 + 32

p*�d3����"�7uF������+E+0�����

9 / 5 * celsius + 32

&V�~3�����:�3 Mhi��`<30��������3�+Ba- -�:�� -��(=3���� NL:���`<3������. -���3k�Z��Ng3���� ���������� -�fahrenheit.C

� �g:;3!��N&,�R��:���3����"���������� ��\&%��3��d3����"� �303��<�,a[�<�0+0����� ��N 30�.� �7u*�.�0��+0+0����� ��� 3����"���;�.:;3c��N

15(.�<��������+

5 ���+0��:�+ #F&,� ���<3c3����"NL�����M&%����� ��:�3E� :;3

15 degrees Celsius are 47 degrees Fahrenheit.

bc����+ ����+0:��3���+ N -���0��z(���h �<������3�N������ ��:;�6�����7aF����:�+?e ��.(w`����E����`<3'g ����+0:��3���N59(.�<��������+

� -�;������������3 #C+E� &V�. �3R��+ �������.����� ���<���'� b,��� ��.+G&,�<� ��+B3��. �3B3����Dp.���. ��E� (���aF��+E����� ���C�<�� �30���/��� 30�.�63k���C�

int���6�.���������3�+B3���� �/#0�<� @c�>= B.�[p���h�J!$# #Y��� �d M3������d �3���`<+ (�������3��<( p�� (.�~ai�

b,�.��+ (��*��+ ����3,`����0�0��+E�C����(d3�� 3����V������:�L �� (.�~aF��+0�����6&V���<���V3���� ��:.��30������3 ��Ny3k&,� ����3������<��+g��+ ����������<�� � ����� � ����3������� -C�� M3������. -i��:.� pC�<���

The modulus operator.b,�.� �����d �����(.�7�R��Ng3���� ����3������7�!(���a*��+0����� `> -�=pi� ��p�3� -������( &V�~3�� 3����

p.���. ��0� 8�!�B.:;*d:;� ���C�7�� �3����%#���� �d �3������d �3���`�+g(�������3���( p*� ���*(i�jbc��� �d �3������d �30��`> -���:���

a = (a(���a

b)b + a����(

b

-�+E�!�����(�+j���d5XW W �2NL��� �7u� -�6�.���#���Na -��(

b ��0�Xa- ����L �p.��<+j��N 3k���C�

int#�3����ca� -�:.�X��N

bpC�����.�

����� � � �<�0� #�30�.� �7u*�.�0��+0+0�����

(a / b) * b + a % b

�. -+v3����,+� -��� a- -�:��c -+a� bc���c���*(�:��:�+����C�<�� �3���� ��+ `�����+0��(��<�0��(6 -+2 B�D:.~3����.���`> M3���a[� ���C�<�� M3����

-��(��. -+g3����V+0 -���X������`<��(�����`��ie���?5gj ��.( -+E+0�*`��� �3���a*��3k� e_���N�3'g2 -+g3����V��30�.�7� 3k&,� � :��30���.���`> �30��a[����C�<�� �3�����+

* -��(

/�

^_NXpC��30�a -��(

b�. �a[�d����� �_�����[ �3���a[�6a- -�:���+ #j3������

a % b�. -+D ����� � �����[ �3��~a[�6a� -�:.� -+

&,��� �vbc����+g���6�.�����+v3��. �3j3����V����30�����<� (���a*��+0����� �0��:.��(�+ B !$1�# ���63�����+g`> -+0���2^_N_e �3g��> -+G3'gj�����V��Na���

b�. -+% �����[ �30��a[�"a- -�:�� #.��3X��+%���6�.��<������3� M3�������(��<T.����(Z&V���<3����<�%(���aF��+E����� ����:���(�+%:;� ���

(��M&%�y��� X��3��V3��. �3 p���3����B��(�����30��3k�(a / b) * b + a % b

3����V����:���(������ ���*(��VNL���,(���aF��+0����� -�+E� (��<3��7����������+B3���� NL:���`<3������ ����3k� ��Ng3����D���*(�:��:�+B���C�<�� M3����>�D^_N

b�. -+Ra- -�:��

0#ya- -�:�� ��.(

�<h ��`<3V��Na / b

-��(a % b

���� :��.(��<T.����(y�5,�������.� p �`�/z3�� ��:��6�7u� -�6�.��2e -��( 3� �/F���.� �.�0��`���(�����`���+ -��( -+0+0��`��L �3��~aF��3�����+ ����3�� -`��

`���:���3 g�#c&,� ���7330�.� NL�����M&%����� a- -���(w�<a- -�:. �30�����w+0� �*:�����`�� NL���d��:;� -�3��7���. �3���a[� 5 ���+E��:�+��_3���� � -�;������������3c`�����a[�<��+0�����y���

�)����� ���,��� � ��� � �6��> �� ���� �D��� �@��6��@ ������37 :� :��� ����$&�������( �� � �)A������)�!� ���#8 � � ���! � �@��� � �� C �6��@����)� ��� 3<�(��������� �)�=�����)G

� � � �)$&�(��@ '��( �!����� � $(��'� �6����( ��� �& �� ����)��9 C � C �#'�' 3������ �� C �( "�D ������������E����5��$(��'� ��6����! �(3.'��#�� ����'��)G

Page 44: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

?�? ������� ����� ���� �9��� �3� � � ���

9 / 5 * celsius + 32 −→ 1 * celsius + 32

−→ 1 * 15 + 32

−→ 15 + 32

−→ 47$%�<�0� &,�"+0���"30�.���E�<�0�0����� �d -(��Vp�� 3���� ����30�����<�X(.�~aF��+0����� �

9 / 5�. -+,a� -�:.�

1�

Unary additive operators.�=�j�. �a[� -~���> -(;�V3���:�`�����(!3����2:�� M�0�

-���C�7�� �3���� #� -��("30�.��+n���i�<�� �3����

(��*��+R&V�. �3R����� �7u*�C��`<3�+ �R30�.� a- -�:�� ��Nj3���� `����6�C��+0�~3�� �7u*�.�0��+0+0�����-�'&)(0= ��+B3���� �����[ �3���a[� ��N

3���� a- -�:�� ��N �'&)(0= � bc���<���=��+Z :.�. ��E�+���i�<�� �3���� # NL����`����6�.��<3��<�.�<+0+ #R -�30�.��:���� �~3�+

�ENL:���`<3������. -��~3s� � ��+ ����� � �7uF��+E3����.� � 30�.�Va- -�:��R��Ny3����B`����6�C��+0��30�V�7uF�����<+0+0�����+�'&)(0= ��+,30�.�B+0 -���

-+,3���� a- -�:�� ��N �'&)(0= �

Increment and decrement operators.12 -`�� ��Nv3����!3���/[����+

++ -��(

--��+B -+0+0��`��L �30��(Z&V��30��3k&,�

B.�������/# � � :��. ��0�d���i�<�� �3����0+c3��. �3c(���h �<�%��� ������`��<(.�<�.`<� -��( -+0+E�*`��L M3���aF�~3s�[�bc��� ������� ���.`7����������3

++ -��( 30�.� �������_(���`<�������<��3

-- ���� ��������3 -+0+E�*`��L M3���a[���!bc��� �<hi�<`<3!��N

3���� `����6�C��+0��30�V�7uF�����<+0+0������+++

� &)(0= -��(--

�'&)(0= ��+,30� ����`<�0�> -+0�9e_(���`<���� -+0� #;����+G�C��`<3��~a[���� gg3����a- -�:�� ��N �'&)(0= p*�

1�Vb,������# 3���� ��p.rG�<`<3V����NL�7�0����( 3��6p*� �'&)(0= ��+X���73�:;������(y� ;���V3�����+X30���d �/[�

+0����+0��# �'&)(0= �. -+j3��"pC�B -���a- -�:���� �=�B -�+E�!+� �� 30� M3g�������_����`<����������3g��+++��� (0=>� { &�# !.�J,5���"!$# #

-��(Z+0������L ���~� NL���--�

bc����C��+E3 �_����`<����������3++ -��(z3���� �C��+G3 � (���`<�0��������3

-- ���� ���N�3 -+0+0��`��L �30��a[��� SV+ pC�<NL����� #

3����6�<h ��`<3 ��N 30�.� `����6�C��+0�~3�� �7uF������+E+0������+ �'&)(0=++ -��( �'&)(0=

--��+"3��Z���.`7���> -+0�Ye ����+G�C��`<3��~a[����

(���`<���� -+0�)g"3����Da� -�:.� ��N �'&)(0= p*�1#v -��( �'&)(0= �. -+!3���pi�� -� �a- -�:�� NL��� 30�.��+"3���&,���E/i� bc���

���<30:��0�za� ��:�� #g3�����:�����#g��+ -�z�0a- -�:��`����0���<+E�C����(������ 3�� 3���� !.*-B a- -�:����N �'&)(0= S���K�!$=>� 3��������`<���<������3D��� (.�<`<����������3 3��*��/ �.L -`��-� �=�Z -�+0� +0 >� 3��. �3D�C��+E3�� ����`<���<������3 ��+

++��� (I!.�>� { &

# !.�J,5���J!$# #. -��(Z+E������L ��0�� NL���--�

bc���"(.�~hi�<���<�.`<�"pC�<3k&,���<�Z3����"����`<�0��������3c���C�7�� �3�����+c����������� -��(��i��+E30T;u����3� �3������ ��+c����:�+��30�� M3���(Z���3����"NL�����M&%����� `��*(��"N��� -��������3>�

int a = 7;

std::cout << ++a << "\n"; // outputs 8

std::cout << a++ << "\n"; // outputs 8

std::cout << a << "\n"; // outputs 9x2��:��d ��d ��0��:.�R3��. �3,3���� ����`<����������3c -��(�(���`<�0��������3X���C�<�� �3�����+c ���� +0:;�C�<� ! :���:�+ #;+0���.`<� 3������~�NL:���`<3������. -��~3s�!`> -�DpC� ���> -�� � ��( p*�D`���� p ���.���.�X3����X �+0+0������������3v���C�<�� M3�����ek{*��`<30����� �*������� �$g &V�~3�� -�� -(�(.�~3���a[�B���C�<�� �3����>�2^_��(�����(�#;��N

a��+c a� ��0�L �p.�� #*30�.� �7u*�.�0��+0+0�����

++a��+,� �*:���a- -�����3c���a- -�:��

-��(w�<hi�<`<3d3�� 3����Z�7uF�����<+0+0�����a = a + 1

�)b,�.�7��� ��+6����� +0:;p�3���<3k� # 3�����:���� � ��N �'& (0= ��+� �������<�� � �a� ��:�� #

++�'&)(0= ��+ # !.� ����`��<+0+� ������� � ��:.�~a� -�����3 3�� �'& (0=

=�'&)(0=

+ 1� bc�������> �+0���

��+ 3��. �3 ��� 30�.� NL�������<�!�7uF������+E+0������# �'&)(0= ��+"�<a- -�:. �3���( ������ ����`�� #�&%������D��� 3���� L M303��<� # ��3"��+�<a- -�:. �3��<( ��1��J��� � ^_N � &)(0= � �+% -� �<hi�<`<3 #�3�����+,`> -� �d �/[� (.�~hi�<���<�.`<���AR� 3���� ��3����<� �. -��(�#g3�����+D+0:;p�3���<3k� ��+D�.��3 3���� ���� -+0���4&V���z���.`7����������3 ��.( (���`7����������3

���C�<�� �3�����+% ���� +0�6�i��� :�L M�B -��(Z&V��(.�<���:�+0�<( ��� 5XW W �XSVN�3��<�B -� #.��3 1b!$:4* B pi� �> -+E� 3��d �a[����(3������ ��� ���� �`<3���`��-�Bbc��� 30�0:�30� ��+%3��. �3B����`<�0��������30����� ���R(���`<���<������3����.� a� -�:.�<+Vp*�

1 ��0� +0:�`��

N���� ��:�����3%���C�<�� �30������+c��� 3k�*�.��`> ��5cW W `<�*(�� 30� M3%��3,� ��F+c��h 3�� �. �a[�!+0�����030`�:;3�+XNL���c3������ �

Page 45: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� ?�I

Prefer pre-increment over post-increment.bc��� +E3� M3���������3�+

++i; ��.(

i++; ��0� ��p*aF����:.+E��

� ��:.�~a� -�����3 #y �+R30�.�<���R�<hi�<`<3 ��+B3����D+0 -��� -��( 30�.� a- -�:�� ��Nj30�.� �7u*������+0+0�����=��+B����3R:�+0��(y� x2��:`> -�d�7uF`�� ��.���V30�.�<�|&V�~3����> -`��d��3����<�, ��Ep �~30�� ������� &V��30�.��:;3g �hi�<`<3������!3����%pi���. >a*����� ��NC3����V+E:��������:���(������R���������� -� �����������<a[�<�g�[��: � �a[�,3�����+2` ������`<� #��[��:6+0����:��( ����3jNL���j3����,������� ���.`7����������3���C�<�� �3����>� Kv�����_����`<����������3 ��+j3����%+0���6�.��7�g���C�7�� �3������ pC��`> -:�+0�X3����%a� ��:��V��N

++i`� -�d+0���6�.�� pC�

���> �( ��h=3����!a� M���L �p.��i�%^_� `<����30�� �+E3 # 30�.� �i��+E3 � ���.`7����������3%�. -+V3�� �G�0������� pC�<���D3���� �����������. -

a- -�:��"��Ni�jSV+,�������_����`<����������3c��+X+E���6�.��<� #���3X -�+0� 3�����(�+X3�� pC�"�������R� �6`�������3>�

� ��8�,.=)Z � � �c&%����30� �G�������_����`<�������<��3g30����(.+23��!pC�X�������c� �6`�������3�� pi��`> -:�+0�V���6�d -���D`> �+0��+3����6`����6�.����<�R���> -�� � ��+"&%����� 3���� a- -�:��6��N, -� � uF������+0+E����� ��+!����3 :�+0�<(n� ^_� +0:�`�� �`> -+0��#�3����`����6�.����7�B�d �� ` ������+0� ��� ��3�+R�'&V�=3��d���<�.L �`��D30�.� �C��+G3 � ����`<�0��������3R��� 3����D+0��:;��`��D`��*(�� p*� �G�������_����`<����������3��d���=�d �` ������� L ��.��:. -��� �+! -� ����3������ � M3������y� $%�M&,�7a[�<� #y3����<���D��+! Mp +E���:;3�������� pC�����<T�3,���` ������+0����� !�C��+E3 �_����`<�������<��3 &%�.�7���R !������� ���.`7����������3 &,��:��(d(.�D -+ &,���_� ^_�30�.��+`> -+E� #;�[��: +0����:.�( 3� �/[�R3����Rp :;��(���� N��0���H3���� `����6�.����<� -��(Z����3������ � �Xp*��[��:��0+0���N �^_� �����/F�����B M3gb� �p.��,o #��[��: ��+0�R����3���`�� 3��. �3v�i��+E3 � ���.`7����������3 -��(D�i��+E3 � (���`7����������32 ���� 3����

�������:��. ��0�d���C�7�� �3�����+ 3��. �3c M���R���N�3X -+0+0��`��L �30��a[��� b,�.��+c�d M/[��+ 3��������c:�+� -��� ����C�> M�,+0�����<&V�. �3`���:���30�<������3�:���3���a[���

Assignment operators.bc���� -+E+0������������3"���C�<�� �3����

=��+ �a- -��L �p.�� NL��� ��23k���C��+ # +E���d{*��`<30�����

�*������� �*� �g:;3R3����<���D ��0� +E�i��`���T.` ���C�<�� �3�����+B3��. �3R`���� p.�����!3���� �����3������<30��`"���i�<�� �3����0+R&%��3�� -� -+0+E������������3>�xb,����+0� ���� 3���� p.���. ��0� ���C�7�� �3�����+

+=#-=#*=#/= -��(

%=�Ybc��� �7u*�.�0��+0+0�����

�'&)(0= �+=

�'&)(0= � �. -+X3����"�<hi��`73B��Nv -(�(������ 3���� a� -�:.� ��N �'&)(0= � e -�Z�Ea� -�:.� g 3�� 3����"a- -�:��!��N�'&)(0= � e �� �a- -�:��)g � bc���R��p rs��`73c�0��NL�<�0���<(�3�� p*� �'&)(0= � ��+ �0�<3�:;������(y�gb,����+ ��+c �������<�� -�� � �3��������NR3����Z�.�0��� ����`<�0��������3 � 3���� �7u*�.�0��+0+0�����

++� &)(0= ��+�� �*:���a- -�����3�3�� �'&)(0=

+= 1� S%+dpi��NL����� #

�'&)(0= �+=

�'&)(0= � ��+ # !.� � �*:���a- -�����3 3�� � &)(0= �=

�'&)(0= �+

� &)(0= � ���z�������<�� - # +E����`�� 3����L �3E3��<�c�7uF�����<+0+0�����Z�7a� -�: M3���+ �'&)(0= � 3s&%��`����bc���R���C�<�� �3�����+

-=#*=#/= -��(

%=&,���0/����3����R+� -���%N -+0��������#*p -+0��( ���30�.�R+0:;p�30�� �`<3�������#

�D:.~3����.���`> M3�������#�(���aF��+E������#F -��(Z����(.:��:�+ ���C�7�� �3���� #F�0��+E�C��`73���a[����[�

2.2.5 Order of effects and sequence points^_��`<�������<��3� -��( (.�<`<����������3 ���C�7�� �3�����+ -+�&,�<�� -+v -+0+E������������3n���C�<�� �3�����+n`�����+E30��:�`<3 �7uF������+E+0������+&V�~3��Z -� �<hi�<`<3>� {*:�`�� ���C�<�� �3�����+,�. �a[�"3��DpC�":�+0�<(Z&V��3��`> ��0�!NL���c3s&,�D���> -+E���.+<�

;���j����`���#[�0��`> -��3��. �3v3���� �<a- -�:. �3������ ����(��<� NL��� 3���� +0:;p � � uF������+0+E������+j��N V����a[���D�7uF�����<+0+0�������+j�.��3 +E�C��`��~T �<(������������<�� - � ���� -���7uF�����<+0+0������3�� pC�Xa� -���(6��3g� �+g3�� ����a[�X3����%+� -���ca� ��:��VNL��� -�i�i��+0+0��p.��R�<a- -�:. �3�������+0� ��:�����`���+��gbc����+c��+ #;NL���%����+E3� -��`�� #;����3c3����"`� -+0� NL���%3���� �7uF������+E+0�����

++i + i

&V���<�0�"&,� +0:;�.�i��+0�"3��. �3i��+X Da- ����� �p.��R��N�3k�*�C�

int� ^_N

i��+c������3��L -���

5#.+� �� #;3������Z3����Ra� -�:.�

��Ni3����V`����6�i��+0��3��c�7uF�����<+0+0�����d�d �� ���6�.�� -`<3���`<�XpC�11���

12�2b,�.�X����+0:��3g(.�7�C����(�+ ���6&V���<3����<�

���D����3D30�.�d�<h ��`<3 ��Nc3�������N�3D���C�<�� -��(++i

��N,3����� �(.(���30����� ��+ �.�0�*`���+E+0��(zpC�<NL�����30�.����������3���C�<�� -��(

i��+ �7a� -�: M3���(y� bc�����7u*������+0+0�����

++i + i��+ (��<T.����( 30� pi������a- -���( p�� 3����5cW"W

+E3� ��.(. ��0(n�

Page 46: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

?[P ������� ����� ���� �9��� �3� � � ���

{*��`�����(�#R -�+0� 3���� ����(��<����� &V����`��w3���� �7hi��`<30+���N �� �7uF�����<+0+0�����U M��� �.�0�*`���+E+0��(U��+����3+E�C�<`���T.��(y� ABp�aF����:�+0~� #�3�����+!��+ ������ -� ��+E+0:�����N, -� �7uF�����<+0+0����� �. -+ �������D3��. -� ���.���7hi��`<3��$%����`���# ��N �[��: �����<NL�<� ����3R3��d&,���0�0� �pC��:;3R�<h ��`<3"����(��<� � 1 �.+E:��0�D3��. �3R�� -`�� �7uF�����<+0+0�����=30� M3�[��: &X����3������<�.�7�� �3���+D �3D����+E3 ���.�d�<h ��`<3>� ^_�z -��� `� -+0� #j -� � uF������+0+E������+ �. �a[��3�� ��pi�<� 3����NL�����'&V���.� �0:.����

Single Modification Rule:b,���!�<a- -�:. �3������ ��N� -�Z�7u*�.�0��+0+0����� �d �������(���N���3���� a- -�:�� ��N -�

��p.rs��`<3X��N�NL:���( �������3� �i3s���C�" �3%����+G3,���.`<���

;���X� u� -�6�.�� #�`�����+0��(��<�,3����RNL�����'&V����� ���.����`�����3,��*��/F���.�!�7uF������+E+0����� 30� M3,����a[���a[�<+X !a- ���� � �p.��

i��Nn3s���C�

int�

i = ++i + 1

b,�.��+"�7u*������+0+0����� � �+ 3k&,�Z�<h ��`<3�+ �"3���� ���.`7����������3"��Ni -��(=3����6 �+0+0������������3B3��

i� SV+ pC��3��

�<h ��`<3�+D���*(���N�� 3����da- -�:�����Ni# 30�.�d�7u*������+0+0�����z(��*��+ ����3 ����+E�i��`<3 3���� {*�������� ���*(���T.`> �30�����

�X:��� -��(�#;3����<����NL���0� #���3%��+c����a- -���(y�S 3cT���+G3X+E������3 #F30�.��+ +0������+,+E30�� -�������gb,���R+0:;p �_�7uF�����<+0+0�����

++i + 1��+ &,�����_(��<T.�.�<( #F -��(���3

�. -+R3��pi� �<a- -�:. �30��( pC�<NL�����D30�.� -+0+E������������3B3� M/[��+ �.L �`����D{*� &%���<���D��+B3����D������p.������^ 3 ��+ `�����+0� ��:.�<�.`<�"��Nn��:;�,:.��(��<��~�F����� `����6�.:;3��<�,����(.�< #�30�.�Ba[��� X��:��d -���d ���`�����3���`73�:;������ F�����3����6`����6�.:;3��<�>y@+"�i������3!��N,a*���<& #�3����6�<a- -�:. �3������ ��N,30�.� +0:;p �_�7uF�����<+0+0�����

++i`<���.+E��+E3�+ ��N 3����

NL�����'&V���.� +G3��<�.+��

���X5 ���*�d3����Ra� -�:.� ��NiN������H30�.� �d -������������0�6����3��D�����"��Nn3���� 5,K �)���<����+E3��<�0+>z

�*�,SV(�(13��D3�����+,a� -�:.� ���3���� ���<����+E3��<�>z

8F� � ����3��B3����R��������+E30�<�%`<����3�����3%p -`�/d3�� �d ���� ���<�����0� #F �3,3����" -(�(;����+0+X��Niz

5 ��> ���~� #.3����!T���+G3%3k&,��+E3��<�.+R ��0� ����`���+0+0 ��0�Z3�����p�3� �����3����!a- -�:�� ��Nv3���� �7u*������+0+0�����++i

-��(�#������`�� #�� �a[� 3��,pC�v�.�0�*`���+E+0��( pC��NL���0�23����2 -+0+E������������3>� �g:;3n3���� 30�.�~��("+G3��<� (��*�<+n����3n����`���+E+� �����~��. �a[� 3��DpC� `����6�.��<3���(dpC��NL���0� 3����" -+0+0�����.���<��3>� ^_� ����(��<�X30�6 -���M& 3����"`����6�.����<� 3�� ���.30����� � �3���� 3E�� -��+0NL�<� ��N!( M3� pi�<3k&,�����x5,K �l��������+E30�<��+ -��( �d ���� ���������E� e &V����`�� ��+ a[�<�0� � :�`���.L �3�NL���0��(��<�i����(.�<��3'g�#n3�����+ ����(��<�!�. -+"����3"pC�<��� +E�C��`<��T.��(y�6^_� N -`73 #���3"��+ ����3!:��;���> -+E��� Mp ��3�� -+0+0:����63��. �3 30�.��30�� �6`�pC�<3k&,���<� ��������+E3��<��+D -��( �d -��� ���������0�=��+ �����[ -��� � ��( +E:.`��z30� M3+0�<a[�7�� -n��3�����+c ����R30�� ��.+ENL�<����( �3c����`��"��� ��:.��`�/*�� -N�3��7�B -����3����<� #;:�+0���.�D+0���_`> -���<( S :4=)���V� �{*:;�.�i��+0� �+ pC�<NL�����D30� M3

i������3��L ���� � �+Ra- -�:��

5� ^_Nj3���� -+0+0�����.���<��3R��+B�C�<�0NL��������( �N�3��<�

3���� �0������+E3��7� `�����3�����3!��+"&X����3030���=p -`�/ 30�Z�d -��� ���������0� #i = ++i + 1

+0�73�+i3��

7� �g:�3!��N

3����d -+0+E������������3!� M�.�i����+ S>��KL!$=>� # 3�����L �3��7� 30�� -��+0NL�7� ��N,30�.�6�0������+E3��7� a� ��:��6�Ma[�<�E����(���+ 3����

�����<a*����:�+ca- -�:�� ��N7#. -��(

i��+X+0�73X3��

6���.+G3��> -(y�

;���03�:��. �3����� #��[��:6(��"�.��3j�. �a[�c3�� &,���0�0� �pC��:;3 3�����+0�X(��<3� -���+2(�:��,3��"3����%{*������������*(���T.`> �3������ �X:�����vSV�+0� #��~3g��+j��:. ��� -��3�����(63��. �3g -�.�<h ��`<3�+ ��Ny ��6�7uF�����<+0+0�����d+E3� M3���������3 ��0�X�����*`<��+0+0��(pC��NL���0�Z3��������7uF3d+G3� �3������<��3 ��+6�7uF��`�:;3���(y� b,���Z+0������`������� 30� M3 3��<�0�����. �3���+ -�w�7uF�����<+0+0�����+E3� M3���������3 ��+ +� -��(3��DNL�����\ ��� � : �># �h�k(;!$�/#0� �2S,3c ����d+0� ��:�����`�� �i������3 #* -�i�7hi��`<30+X�������<�� �3���(p*�d������`<��(������ +E3� M3���������3�+,���%�7u*������+0+0�����.+X�. >a[� pC������`����6�.��<3���(y�

Page 47: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� ?�o

^_Nv�[��:Z�C�<��`��<��a[� 3����!�����<a*����:�+%�7u; -�6�.��! �+B ��03��~T `<�L - #;���<���!��+V �E�����0�"�. �3�:;�� � � a*����L �3��������N 3�����+0�������� ���*(���T.`��L �30����� �0:.�� � ��N

nextvalue��+ �a� ��0�L �p.�� ��N 3k�*�i�

int# ��3!��������3!+0�����

3��. �3

nextvalue = 5 * nextvalue + 3

`���:��( �������R`����6� -`<3��� pC� &X����3030���Z -+

(nextvalue *= 5) += 3

b,�.��+2&%���;`����6�.������(nextvalue *= 5)

��+g -�6�a- -�:�� #[+0�"&,�X`> ��d -+0+0�����D3��!�~3>�2{�3���� #�3����XL M303��<��7u*�.�0��+0+0��������+X����a- -���(+0����`��"��3c���*(���T.��+

nextvalue3k&V��`����

S 3 3�����+D�C������3 # -�w �3E3�����30��a[� ���� -(��<�6+0����:��(4&,����(��<�6���'& -� �7uF�����<+0+0����� 3��. �3 ����a[��~a[��++0�<a[�7�� -���:;30�.:�32���C�7�� �3�����+v`<���6� �����+�3��R3����X{*������������*(���T.`> M3������ �X:����� ^_�.(����<( #� -� �7uF�����<+0+0��������/[�

std::cout << a << "^8 = " << b * b << ".\n"

�. -+V+0�7a[�<�� - �7hi��`<30+R -�n��N &V����`�� ���*(���N��d3���� �a- -�:��std::cout

�%bc����+c&,���0/F+%+0����`��!3����!3k���C���N

std::coute &V����`��6&,�c&V��������3 (���+E`�:�+0+ ���<���)g2��+ # !.� NL:���( �������3� � ��.(�#��.�<�.`<� #*3����B{*���.����

���*(���T.`> M3������ �X:��� (��*��+c����3V ����.��d���3�����+c`> -+0���

2.2.6 Value rangeSUa� M���L �p.��R��N 3k���C�

int��+% �+0+0�*`<�L �3���(&V��30�� { &`�'B �*:�� pC�<�c��N����<�����0�6`��<��+ #� -��(3����<����NL�����

-�+E�D&%��3��Z T;u;��(��*:��Dpi�<�c��N p.��3�+ #;+0 >�b� � � `> -�C3�����+c

bH'S>����=��J(0=>� ����#0�J,5���J!$# �

{*:�` �w ���<�����<+0����3� �3������ ���6�.�����+!30� M36 -� ��p rs��`73 ��Nc3s���C�int

`> -� -+E+0:���� ������ T.����3���~��d -���Z(���hi�7������3Ra- -�:���+��!{*����`��D -��� p �~3R`> -� ����(.�7�C����(�����3�~�Z�. �a[�D3k&,�d+E3� �30��+ #i3���� �d Mu;��� :���*:�� pC�<�c��N �0�<������+0����3� �p.�� a� -�:.�<+X��+

2b #. -��( 3���� �`<3�:. -ia- -�:�� �� -�����"��+c(��<T.����( -+,3����"+E�<3

{−2b−1, −2b−1 + 1, . . . , −1, 0, 1, . . . , 2b−1 − 1} � ���N

2b ��:.� pC�<�0+����fx2��:`� -� T.��( ��:;3 30�.�R+0�d �����+E3g -��(L �������+G3int

a- -�:���+ ���d�[��:��c`����6�.:;3��<� #:�+0����� 3����"��~p.�� ��0�

limits�2bc���"`����0����+G�C����(.���.�D`���(.� ��+c����a[���Z���ZKv�������� -� I*�

�// Program: limits.C

�// ouputs the smallest and the largest value

�// that an object of type int can have.

�#include <iostream >

�#include <limits >

int main()

{

���std::cout << "Minimum value of an int object is "

�)���������� �B��� �@��6��@ @������? ��=?������� �����#8 � �������9(8� :E�� %A @:��� � ���� � �����(� �)�E�=3 $(��'� �� � �� �&� C �( �'�@ 8 ����� � � C � �6 � ����6�=���( ���8�'��(9 ����$�� �(���� ����� �� ��#����� � ��� ���,� �!����@ 8:A ����5�D��= �@�����@ G

Page 48: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

?[# ������� ����� ���� �9��� �3� � � ���

� �<< std::numeric_limits <int >::min() << ".\n"

���<< "Maximum value of an int object is "

���<< std::numeric_limits <int >::max() << ".\n";

���return 0;

���}

Program 5:(0=>!�@.� �+*P�[86���V� W r

���.�<�d�[��:6�0:.� 3����X���������� -�limits.C

���d 8 � �_p.��3j+E�F+E30��� #��[��:6&%���;����+E32��~/[���� ���<3j3����NL�����'&V���.� ��:;30�.:;3>�

Minimum value of an int variable is -2147483648.

Maximum value of an int variable is 2147483647.

^_��(�����(�#� -+2147483647 = 231−1

#-�[��: `� -� (.�<(.:�`��j3��. �3 30�.�j�*:�� pC�<� ��NFp �~3�+ :�+0�<( 30�%���<������+E����3 -�

inta- -�:��c���63�����+j+G�F+E3��<� ��+

32�vS 3g3�����+ �C������3 #��[��:d ����c����3 +0:;���C��+0��( 3�� :���(.�7��+E3� -��( 30�.�

�7u*�.�0��+0+0�����std::numeric_limits<int>::min()

��� (.�73� -�� #�p.:;3g&,�cpC������7a[�c3��. �32�[��:����<3g��3�+��(��> *�^ 3c��+ `���> M�c30� M3 3����" M����3������<3���`X���C�7�� �3�����+�e �7u;`��7�.3c3����R:�� M�0�

+ -��( 3����Bp.���. ��0�

/ -��(

%g

`> -������3 &,���0/ �7u; -`<3���=���/[� 30�.�<��� �d �30�.�<�d �3���`> � `���:���3��7�0� ��03�+ #��<a[��� &V����� 3�������� M����:�������3�+ ����6�0��+E30����`<3���( 3��Z���7�.�0��+0����3� �p.��

inta� -�:.�<+�� b,�.�6�0�> -+0��� ��+!3��. �3"3����6a� ��:���+ ��N,`����6�C��+0�~3��

�7u*�.�0��+0+0������+R`�����+E30�0:.`73���(=N��0��� 3�����+0� ���C�<�� M3�����+B`> -� :���(.�7� �c���R�Ma[�7� !.�M& 3���� a- -�:�� �� -����� ��N3���� 3k�*�C�

int� bc��� ����+E3R��p*a*����:�+B+0:�`�� �7u� ��6� �� ��+B3����D� uF������+0+E�����

2147483647+1� S%+R&,�

�. �a[�Xrs:�+E3V+0�<����# ��30+c�d M3������d �3���`� -���D`����0�0��`<3%a- -�:�� ��N2147483648

��+X����3c���<������+E����3� Mp ��"�'a[�<�3����R3s���C�

int�����[��:;�V+E�*+E3���� #;+0�D�[��:�&V���C�����<aF�~3� �p.������<3X+0�����R��3����<�ca� ��:����

{*:�` � :��.(��<���c -��( �'a[�<� !.�'&V+R ��0� +0�<a[�<�0�D������p.���� ��� �d -������� -`<3���`> - M�.�.���`> �3�������+ #;p.:;3��3,&,��:��( pi�! -���<a[��� �������R+0�<a[�7���!������p.����\����3,3�� /*�.�'&)3��. �3,3����<�`> -�Z��`�`�:;�>�

2.2.7 The type unsigned intSV� ��p.rG�<`<3 ��N 3k�*�C�

int`> -� �. �a[���.�<�[ �3���a[� a- -�:���+ # p :;3 ��N�30��� &,� ���.~�=&,���0/ &V��3�� �. �30:��� -

�*:�� pC�<��+<��� �%+0���.� 3k���C� 3��. �3 ���<�����<+0����30+ ������ �.��� �_�.�<�[ �3���a[� a� ��:���+ -���M&%+B3��Z�7u*3�����( 3������ -�����R��Ny�C��+0��3��~a[�Va� -�:.�<+,&%��3�����:;3 :�+0�����D�������Vp.��3�+��25cW"WY�����'aF��(���+,+0:�`��Z 3k�*�i� #;��3c��+ `> -����(unsigned int

�gAR�Z30�.��+c3k�*�i� #;&,�"�. �a[� -�i3���� ����~3������<3���`V���i�<�� �3����0+,&,�! -�+0�D�. �a[�!NL���int

#&V�~3��30�.� +� -��� ��0��3�����+ #F�.�0��`���(�����`���+% -��( -+0+E�*`��L M3���aF�~3�����+��v} ��a[����

b�_p.��3,���<������+E����3� M3�������#F3����

a- -�:�� �� -�����"��Nunsigned int

��+ 3����!+E�<3

{0, 1, . . . , 2b − 1} ��

��N2b �. �3�:;�� -��*:�� pC�<��+�� ^_�.(����<( #�&%�.�<�D�[��:D���<�.L -`��, ��F�*`<`�:;�0������`���+2��N int p*� unsigned int���3���� ���������� ��

limits.C#���3c�d ����.�0�*(�:�`�� 30�.� NL�����'&V���.� ��:;30�.:;3>�

Minimum value of an unsigned int object is 0.

Maximum value of an unsigned int object is 4294967295.���%�(�� ��)9����������� �=3 �6� ����=' % �� 8 � ���*�D��6���� C �#�� 0

9��= {0, 1, 2, . . .}

G

Page 49: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� ?[q

mn�~3��<�� -�+!��N 3k�*�C�unsigned int

�����/=���/[�6���30�<�� -�+ ��N 3k�*�C�int

#vNL�����'&,��( p*� ����3����<� 30�.���<3E3��<�

u���

U�$ ;��� �7u� ��6� �� #

127u -��(

0U M��� a- -���( ��~3��<�� -�+"��N 3k�*�i�

unsigned int# &V�~3��

3��������,a- -�:���+X��������(��L �3��<�� ���� M������3��

2.2.8 Mixed expressions and conversions1 uF������+0+E������+D�d �� ����a[���a[��+0:;p � � uF������+0+E������+D��N,3k�*�C�

int,.#�B ��N,3k�*�C�

unsigned int� ����

�7u; -�6�.��17+17u

��+ �a� ����( M����3������<3���` �7uF�����<+0+0�����y� �g:;3"&%� M3! M��� �~3�+B3s���C� -��(=a� ��:��'� ^_�+0:�`�� 8Y� &`�'B �'&)(0=>� �����J!$#0� #x3��������C�<�� ��.(�+ M���6���6�.���`<��3��� �h!$#Ip��>=)�<�'B 3�� 3���� 8�!$=>�?@c�># ��=�,5*3k�*�C�-� �j��30�.� 5XW Wt+E3� -��( M��(�# 3���� �������"�������<�� -n3k�*�C� ��+

unsigned int�Vb,���<����NL���0� # 3����

�7u*�.�0��+0+0�����17+17u

��+c��N 3k�*�i�unsigned int

-��(Z���<3�+c�<a- -�:. �3���(�+E3��<�Zp���+G3��<� -+

17+17u −→ 17u+17u −→ 34u

b,�.��+c+E�<3�:;� ��������3 pC�R+0�����<&%� M3,`�����NL:.+E����� #;+0����`��R�����d M3������d �3���`<+ #[��3c��+vrG:�+E3,3���� ��3����<�,&c �� �����:���(�� � e 3����V+E�<3c��Nn����3������7��+ gj��+g�������V�������<�� � 3��. -� � e 3����B+0�<3,��Ny�. �3�:;�� - �*:��Dpi�<��+ g7� �=� ����R����3X �&c ����R��N -���d(����<�C�<�2rs:�+E3���T.`> �30�����dNL���c30�.�R&c ��d��3,��+,(������ ��� 5cW"W #;p :;3X �3,��� -+E3,3����`�����a[�<��+0��������+c&,�<��� (��<T.����(y� X��� � �����[ �30��a[�

inta- -�:���+D ��0� �E`�����a[�<�E3���( � 3�� 3�����+� -��� a- -�:�����N,3s���C�

unsigned intz

�����[ �3��~a[�int

a� ��:���+B ����"`�����a[�7�03���( 3�� 3����unsigned int

a� ��:��"3��. �3X����+0:��3�+XN������ e_�d M3�������d �3���`> -���cg -(�(.���.�

2b � b,�.��+%��:��� ��+E3� �p.���+0����+B p.�@rs��`73������ pC�<3k&,����� 3���� a- -�:�� �� -������+R��N int -��(unsigned int

�^_�6�.���`���3j`�����a[�<��+0������+c���d3���� ��30�.�7�,(.�~����`<3�������d ��d ��+0� �*`�`<:���� 5 ����+0��(��<�,NL���c�7u� ��6� ��%3����

(���`�L M�� �3�������+

int a = 3u;

int b = 4294967295u;

b,�.� a- -�:�� ��Na��+

3#n+0����`�� 3�����+Ba� -�:.�D��+ ��� 30�.� �� -�����D��Nj3���� 3k�*�C�

int� �g:;3"��Nj&,� -+0+0:����

3���� 8 � �_p.��3,+E�*+E3����HN������H �pC�'a[� #F3����Ra� ��:�� ��Nb��+c���6� ���������3� �3������ (.�7T ����(� -`�`����0(.���.� 3�� 3����

5cW"W +E3� ��.(. ��0( #;+E����`�� 30�.�"���3��7�� -4294967295

��+c��:;3�+0��(��B3���� �� -�����"��Nint

2.2.9 Binary representationSV+0+E:.�����.�

b� p.��3,���<������+0�<��3� �30������#F&,�! -~���> -(;��/F���'&)3��. �3,3����"3k�*�C�

int`��'a[�<��+c3����"a- -�:���+

−2b−1, . . . , 2b−1 − 1,

&V������unsigned int

`��'a[�<��+

0, . . . , 2b − 1.

^_�43�����+D+0��`<30������#g&,� &c -��3 3�� 3� �/[�� `����+E�<�6�����/ �3 ���'& 30�.�<+0��a- -�:���+6 M��� ���7�.�0��+0����3���(w������������0� #X:�+0�����z3����

b �a� -��L �p.�� p �~3�+��Ob,����+ &%��� -�+0� +0����()������� �������3 ���U+0����� ��N 3����

�d �3��7���L -i��� 3����R�.�0�<aF����:�+c+0��`<30�����y�

Page 50: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

I�] ������� ����� ���� �9��� �3� � � ���

bc��� S �/#�,.= DM�'& (;,.#0���J!$# ��Nv � M3�:;�� -C�*:�� pC�<�n � � ��+c30�.� +0:��

n =

∞∑

i=0

bi2i,

&V���<�0� 3����bi

���� :.��� ��:�����d(��<3��<�0��������( `<�*� � `�������3�+%N������{0, 1}

#F&V��3���������T.����3�����6�d -���d��N3������\pC�������D����� � �<���;� ����X�7u; -�6�.�� #

13 = 1 � 20 + 0 � 21 + 1 � 22 + 1 � 23.

b,�.�d+0� �*:�����`��d��Nc30�.�bi

��� ���7a[�<��+0�����(��<� ��+ `> �����( 3����6p.���. ��0� �0�<������+0����3� �3������ ��Nn�=b,���

p.���. ��0�����7�.�0��+0����3� �3���������N13��+

1101#;NL���%� u� -�6�.����

Conversion decimal → binary.b,���"��(.�<��3���3k�

n =

∞∑

i=0

bi2i = b0 + 2

∞∑

i=0

bi+12i

︸ ︷︷ ︸=:n �

�����'aF��(���+ +E���6�.��d -��������~3����e3��=`����6�.:;3���3����dp ��� M�0� ���<������+E����3� M3������4��NB ����a[���z(.�<`����d -�*:�� pC�<�

n � � ��bc��� ��> -+G3 +E��������T.`> -��3d`<�*� � `�������3b0

��N 3���� p.���. ��0�4�7uF� -��+0����� ��Nn��+

n����(

2�2bc���B��3����<� `��*� � `�������3�+

bi

#i � 1

#F`> -�d+0:;p.+0� ��:�����3�~�6pC�V�7u*30�� -`73���(dp*�d ����.��*�����"3����+� -���B3��<` ����� ��:.�R3��

n � = (n − b0)/2�

;��� �7u� -�6�.���#�NL���n = 14

&,�����73b0 = 14

���*(2 = 0

��.(n � = (14 − 0)/2 = 7

���=�`�����3����*:��V&%��3��

n = 7 -��(���<3

b1 = 7���*(

2 = 1 -��(

n � = (7 − 1)/2 = 3�� ;���

n = 3&,�R���<3

b2 = 3���*(

2 = 1 -��(

n � = (3 − 1)/2 = 1&V����`�� ��> �a[��+%:�+,&V��30�

n = b3 = 1�2^_�Z+0:����d ��0� #

3����Rp ��� M�0�����<������+E����3� M3������Z��N14��+

b3b2b1b0 = 1110�

Conversion binary → decimal.b � `�����a[�<�03 ����a[��� p.���. ��E� �*:��Dpi�<�

bk . . . b0

����3�� (.�<`����d -���<�����<+0����3� �3�������#F&,� `> -� ����`��" -�[ -��� :.+E� 3���� ��(�����30��3k�dN������ MpC�Ma[�-�

k∑

i=0

bi2i = b0 + 2

k−1∑

i=0

bi+12i = . . . = b0 + 2(b1 + 2(b2 + 2( ����� + 2bk) . . . ))

;���B�7u� ��6� �� #.30�6`�����a[�7�03B3����!p.���. ��0� �*:�� pC�<�b4b3b2b1b0 = 10100

����3��6(���`<���d -C���<�������+0����3� �3������ #F&,� `����6�.:;3��

(((b4 � 2 + b3) � 2 + b2) � 2 + b1) � 2 + b0 = (((1 � 2 + 0) � 2 + 1) � 2 + 0) � 2 + 0 = 20.

Representing unsigned int values.{*����`��" -���

unsigned inta� -�:.�

n � {0, . . . , 2b − 1}

�. -+2 Vp ��� M�0� ���<�����<+0����3� �3������D��N ��<�.��30� �7u; -`<3�~�b

e T.�������V:;� &%��3�� ��> �(.���.� � �<����+ g�#[3�����+ p.���. ��0����<�����<+0����3� �3������ ��+ `> -��������`> -jNL�����d �3 NL��� +E3����������

n:�+0�����Z3����

b �a- -��L �p.�� p.��3�+���mn�~/[� 3����

Page 51: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� IF�

a- -�:��B�� -�����R��3�+0���N #*3�����+ +E3����� -���RNL�����d �3,��+ ����3c�7uF�.���`���3��� ������+0`<�0��pC��(p*��3����"5XW WY+E3� ��.(. ��0( #p.:;3X�. ��0(.~� -����3�������� ���+0�"�d M/[��+,+0����+0�!��� ���� -`<30��`���� SV+,3����<���" ����

2b unsigned inta� -�:.�<+ #

-��( 30�.� +� -���R��:.� pC�<�,��Nb�_p.��3,� �3030�<����+ #;�> -`���� �3E3��<��� ����`��*(���+c����� a- -�:����� ;���

b = 3#F3�����+

�����/F+c -+cNL�����'&V+��

n���<�����<+0����3� �3������

0 000

1 001

2 010

3 011

4 100

5 101

6 110

7 111

Representing int values.SU`���������� &c ��d��NC���<������+0�<��3������

inta- -�:���+ :�+0����� 3����B+� -���

bp.��30+

���*�<+" �+ NL�����M&%+�� ^_N230�.� a- -�:��n��+ ����� � �����[ M3���a[� # &,� +E30����� 3���� p.���. ��E�Z���<������+E����3� M3������ ��N

n��3�+E���NTv �*:�� pC�<�cN������

{0, . . . , 2b−1 − 1}.

b,� M3X&c ��d&,�":�+0�" -�C3����b�_p.��3,� �3030�<����+c30� M3X+G3� ��03c&V��30�

0�

^_Nc30�.�6a- -�:��n��+ �����[ �3���a[��# &,��+E3�������3����6p.���. ��0� ���<������+0�<��3� �30����� ��N

n + 2b #j Z��:��DpC�7�N������

{2b−1, . . . , 2b − 1}.

b,�.��+��F���<�(�+ 3���� ����+E+0�����b�_p.��3�� �3E3��<����+ #-30�.�g���.�<+ 3��. �3 +E3� ��03�&%��3��

1�� ����

b = 3#�3����g���<+0:��3������

���<�����<+0����3� �3�������+X ����

n���7�.�0��+0����3� �3������

−4 100

−3 101

−2 110

−1 111

0 000

1 001

2 010

3 011

bc����+B��+B`> -���<( 30�.� ��1b! � � �h!$8X(+* �>82��#0� ���<�����<+0����3� �3������y� ^_� 30�.��+%���<������+E����3� M3�������#y -(�(������3k&,�

inta� ��:���+

n -��(

n � ��+Ba[�<�E� �� -+E� �B+E���6�.��Z �(.( 3���� ���<������+0�<��3� �30������+R -`�`�����(�������3��d3����

Page 52: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

I � ������� ����� ���� �9��� �3� � � ���

:�+0:. -;��:����+j��N p.���. ��0�D�*:�� pC�<�j -(�(���3�������#� ��.( �����������c30�.�c�'a[�<� !.�M&�p.��33e_��N -���cg7� ;���g�7u; -�6�.�� #3�� -(�(

−2 ��.(

−1��� `> -+0�"��N

b = 3#F&,�"`����6�.:;3��

110

+ 111

1101

^_������������� 3���� ���N�3�����+E3 �'a[�<� !.�'&Hp.��3 #23�����+ ����a[�<+101

#j3����d���<������+0�<��3� �30�����z��Nc3�������<+0:��3−3��� 3k&,�cy@+V`<���6� ���������3��Xb,����+%&,���0/*+B+0����`�� 3���� p.���. ��0� �*:�� pC�<�Vpi��������(Z3���� ����`��*(���������N

n��+

����30�.�7�n���

n + 2b �!b,�*:�+ #i&%�.�<� &,�D -(�( 3���� p ��� M�0� �*:�� pC�<��+%NL��� n -��(

n � #i3���� ����+E:.~3R��+`���������:�����3 3��n + n � ���*(�:��� 2b -��(d30�.�7����NL����� -�����<��+ &V��3�� n + n � ����3���� b

��������3�����+E32p.��3�+���%+0�����!30�.�c3k&,�cy@+g`<���6� ���������3v�0�<������+0����3� �3������6&,�V`> -�����'& pC�7303��<�g:.��(��<��+G3� -��(6&V�. �3j�. �� �

�C����+%&%����� �����[ �3���a[�int

a- -�:��n���<3�+V`<����a[�<�030��( 30�63s���C�

unsigned int�%bc��� +E3� ��.(. ��0(

+E�C�<`���T.��+ 3��. �3 NL���,3�����+ #n�. -+ 3�� pC�R����`<���<������3��<(dp��

2b ��g:;3,:���(��<�,3����V3s&,�cy +,`����6�.���������3 #3����R�����[ �3���a[�

inta� ��:��

n -��(30�.�B���<+0:��3������ �C��+0�~3���a[�

unsigned inta- -�:��

n + 2b �. �a[�B3����+� -��� ���7�.�0��+0����3� �3������ �vb,����+2���> -��+ 3��. �323����c`<����a[�<��+E��������+v�.:��0����D`�����`��<��3�:. - #[ ��.( �.�" -`<30: �`����6�.:;3� �3������d3� �/[��+,� � -`����bc���"5cW"W +G3� -��(. ���(d(��*��+,����3 ������+0`7����pC�V3����R:�+0�B��Ny3����V3s&,�cy + `����6�.���������3 #�p.:�3g3����R�0:.��

NL���X`�����a[�<�0+0����� N������int

3��unsigned int

��+c`���> M����d����3���a- �3��<(p�� �~3>�

2.2.10 Integral typesb,�.�7���%��+j R�*:��Dpi�<�2��N ��3����<�gNL:.��(. -������3� -*3k���C��+j30�"���<�����<+0����3g+0��������(� ��.( :.��+0�����.�<(6����30�����<��+ #+0���X3����BQB�<3� -���+2+E��`<3������y� b,����+0�%3k�*�i��+ �d ��D(.�~hi�<�gN������

int -��(

unsigned int&%��3�� �0��+E�C��`73

3�� 3�������� a- -�:����� -������� SV�g30�.�<+0��3s���C��+D ����d`> �����( �/#0�<� @$=�,5*b��D)(I� � #t�> -`��z��N,3������ # -�g3�������C�<�� �3�����+j���b �p.�� �B M���B �a� ���L �p.�� #�&%��3�� 3����V+0 -���V ��0��3�����+ #�������`<��(�����`���+ #� -+E+0�*`��� �3���a*��3�����+2 -��(NL:���`<3������. -��~3�����+ e :���3�� 3���� ��p*a*����:�+c�������3�+ (���`73� �3���(p*�d3����R����+E�C�<`<3���a[� a� -�:.�R�� -������+ g7�

2.2.11 Details

Literals.b,���<��� ���� -�+0� ����� � (���`����d -g��~3��<�� -�+ ��Nc3k���C�

int� SV� !�>�J,5* ���3��7�� - +E3� ��03�+ &V�~3��

3����!(������~30#.NL�����'&,��(�p��Z D+0� ��:.�<�.`<� ��N (�������3�+,N������

03��

7�,b,�.� a� ��:��!��+c3����!�*`73� -y�*:�� pC�<�

���<�����<+0����30��( p*�=30�.� +0� ��:.�<�.`<����N (�������3�+ NL�����'&V������3����6��� -(������0� ;��� �7u; -�6�.�� #C3����6��~3��<�� -

011�. -+,a� -�:.�

9 = 1 � 81 + 1 � 80 �j �'& ,cB �h�>�/8G,5* ���3��7�� -�+ +E3� ��03c&V��3��

0x#.NL�����M&,�<(p��Z +0� ��:.�<�.`<�!��N (�������30+ N������

03��

9 -��(

��<3E3��<��+RN������A3��

F�!bc��� a� ��:�� ��+B3����D���7u; -(���`����d ���*:�� pC�<�V�0�<������+0����3���( p�� 3����D+E� �*:�����`��

��N,(�������3�+! -��( ��7303��<��+!NL�����'&V������3�������� -(������0x� ���� � u� -�6�.�� # 3��������3��<�� -

0x1F� �+ a� -�:.�

31 = 1 � 161 + 15 � 160 �

Unsigned arithmetic.�=� � �a[� (���+0`<:.+E+0��(=���'&

inta� -�:.�<+R ���� `�����a[�<�03���( 3��

unsigned inta- -�:���+ # -��( aF��`��=a[�<��+0 *�Hbc���=�d ���� ��+E+0:��Ue &V�. �33��4(��z&%��3�� ����� �_�0�<������+0����3� �p.�� a� -�:.�<+ g -�+E� ��`�`�:;��+%(�:;�������D�<a- -�:. �3��������Nv ��0��3������<3���`%�7uF������+E+0������+X����a[���a*�����D������ !$# � ��N�3����R3k�*�C��+<�b,�.� 5XW W +E3� -��( M��(U`�����3� -����+ �����=�0:.��=NL��� 3�����+�� ;��� ��":���+0��������(U����3������� - 3k���C��+ #R3����

Page 53: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� I�8

����~3������<3���`"���C�<�� �30����+V&,���0/ ���*(�:���2b #y����a[��� b

�_p.��3B�0�<������+0����3� �3������n�!bc����+B���� -��+V3��. �3B3����a- -�:��,��Ni -���D �����3������<30��`g���C�7�� �3������ &V�~3�� ���C�<�� -��(�+ ��N 3k�*�i�

unsigned int��+v&,��� � (��<T.����(y� ^ 3

(��*��+%�.��3V�.�<`���+0+� M������ ����a[�!3���� �d M3������d �3���`� -��� `����0���<`<3Ba� ��:�� # p.:;3V3���� :���� �*:�� a� -�:.�!���Z3����unsigned int

�� -�����V3��. �3 ��+ `���������:�����3 3�� ��3 ���*(�:���2b �� ;���,�7u� ��6� �� #���N a ��+ !a� ��0�L �p.��V��N3k�*�C�

unsigned int&%��3������� � � �<��� a� -�:.��#F3������

-a�. -+,a� -�:.�

2b − a�

X�+0:�` � ��:��� �7u;��+E3�+RNL���R3����D+E��������(=����3������� ��3k�*�C��+ #n���� -������� 3��. �3R�'a[�<� �% -��(=:���(��<� !.�M& ���� (��> -�3,&%��3��Z M3%(���+0`7���<3��������N�3���� `����6�.����<���

Sequences of + and -.� �g� �a[�g �����:���(D �pC�'a[�j3��. �3���3 ��+�:�+0:. -�~�"`<��> �� &V����`�� ���C�<�� �3�����+ �*`�`�:;�

��� ��Z�7uF�����<+0+0������#.�<a[���Z3�����:����Z+0����� ��N�3������H+0�. ���� 3��������,3���/[���y�"�g:;3X+0����`��"30�.�"`�� M�� -`<3��7��++ -��(

- ��0� ���> �aF���� �'a[�<��:�+0��( ��� ���C�<�� �30���%3���/[����+ # +E�C��`��� - ��:���<+R ���� ������(���( 3��6���<+0���a[� 3����

���> -��������+ ��N +0� �*:�����`��<+V��N+y@+ #.���X��N

-y@+<�

;���V�7u; -�6�.�� #�������N������ ��0��3�����+ #F�.�0��`���(�����`���+R ��.( �+0+0�*`<�L �3���a*��3����<+ ��3%��+%����3%`<��> ��%�.�'&)3������3��<�0�����<3 3����,�7u*�.�0��+0+0������+

a+++b���

---a� bc��� T���+E32�7uF�����<+0+0�����6`<��:.�( ���> -�

(a++)+b#�p.:�32��3

`���:��( -+V&,�<�����> ��a+(++b)

���a+(+(+b)

�B{*������� ����� #*30�.� +E��`�����( � uF������+0+E����� `���:��( ����3����<����> -�

-(--a)#--(-a)

���-(-(-a)

�bc���V5XW W)+G3� -��(. ���( ���<+0���a[��+g30�.��+j(�����<���d Xp*� (��<T.�.���.�R3��. �3g "+0� �*:�����`��V`�����+0��+E3������!������

��N+y@+ #C���R������ ��N

-y@+ #C�. -+V30�dpi�D���0��:��i��( ����3��6� -���0+BN������ ���N�3B3�����������3 # &%��3�� �C��+0+E��p.��Z�����

�����d ����������+���

- �3 3���������(y� b,�*:�+ #

a+++b���> -��+

(a++)+b# -��(

---a���> ��.+

--(-a)�

X��3��3��. �3 NL�����7u� ��6� ��d30�.���7uF������+E+0�����a++b

1k!$:4* B �d �/[� +E����+0�Z&V�����4� ����<��3�����+0� � ��(w -+a+(+b)

#vp.:�3D �`�`�����(������ 3�� 3�������:��� rs:.+G3 ��+E3� �p.���+0����(�#2�~3 ��+ ����3D Z&,�����_NL��������( �7u*�.�0��+0+0������#+0����`�� :.�. ��E� ���C�<�� �30���

++`� -���.��3D�. �a[�����C�7�� -��(�+D��� pC��3��z+E��(���+�� bc����7uF������+E+0�����

---a&V�~3�� ��3�+V�������`> -y� M������30�.� � �3������ --(-a)��+B����a- -���( NL���" -����3����<�V�0�> -+0�����X30�.� ���i�<�� -��( ��N 30�.�

�������_����`<����������3c� :�+E3,pC�" -�Z�a- -�:�� #Fp.:;3c3����"�7u*������+0+0�����-a��+X -� �0a- -�:����

Other integral types.5XW W|`�����3� -����+R 6�*:�� pC�<�B��N2NL:���( �������3� � ��� @$# �hB -��( :4#0��� @$# �hB ��� �

3������� -n3k���C��+��,b,��� +0��������(Z������+V ����signed char

#short int

#int

-��(long int

� b,���+E3� ��.(. ��0( +E�C��`<��T.��+n30� M3 �� -`�� ��N*3������x��+C���<������+0�<��3���( p�� �3n��� -+E3� -+ �d ����Bp.��3�+ -+y3����2�����<a*����:�+�����g��� 30�.�j���+E3���b,��� �*:�� pC�<� ��N*p.��3�+�:�+0�<( 30�X���<�����<+0����3

inta- -�:���+ (.�7�C����(�+ ��� 3����g`����6�.:;3��<���

b,�.�R`����E����+E�C����(������ +0� ��:�����`��"��Nn:���+0��������(d3s���C��+ ��+unsigned char

#unsigned short int

#

unsigned int -��(

unsigned long int�

bc����+E��3k�*�C��+ ����a[��`����6�.����<��+ 3����ZN������<(.��� ��NV��hi�<�0����� ����30�����<��+D&V��3��zL ������<� ����+0�d ����<�a- -�:��X�� ��.���<+g3��. -�

int -��(

unsigned int�j{*�d -���<� a- -�:��X�� -������+ ����%:.+E��NL:� &V�����d���������E�

`�����+0:��6��3������ ��+ 6`�����`��7����# ��.( L ������7�B������+! M���D �3030�� �`<3���a[�!&%�����=�'a[�<� �X -��( :.��(��<� !.�'& �*`��`�:;��+��Rb,��� +0��������T.`> -��`��!��N 30�.�<+0� 3k�*�C��+ie &V����`�� ���� -��0�> -(;��������+E����3R��� 3����D5U�.�0������ -���������L -����:. -���)g �. -+,N -(���( ���Z5cW"W �jbc���B���> -+E��� ��+ 30� M3 &,�R`> -� �*:���3��B�> �+0���� ���6�.���������3j��:;�c�'&V�3� -������ � �d �(.�"����30������ - 3k�*�i��+"��� 5cW"W # ��Nj&,�D�.�<��(=3������ � ^_� 5 3�����+R��+"�D:�`�� ������� `�:�� pC�<� �+0������� 5 ����+0� ��:.�<��3��� # �d -��� 5cW"W `<���6� ����<��+"+0���6�.�� �d �/[�

short int ��.(

long int -�

-��� -+ NL���int

#. -��( 3���� +� -���R�����(�+XNL���c3����"`<���0����+E�i���.(������ :.��+0�����.�<( 3k�*�C�<+��

Page 54: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

I-? ������� ����� ���� �9��� �3� � � ���

2.2.12 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6/F���'&x30�.�R3��;����� S%���~3������<3���`B1va- -�:. �3������ �X:����+�$g�:��.(��<�0+E3� -��(�3���� `�����`��<��3�+X��N����C�<�� �3����,������`���(�����`�� -��( -+0+0��`��L �30��aF��3k�4z8.g6/F���'&x30�.�" ����~3������<3���`V���i�<�� �3����0+XNL���c3���� 3k���C��+

int ��.(

unsigned intz

?5g6pC� �&c ����V3��. �3,`����6�.:;3� �30������+j����a[���aF���.� 30�.�V3k���C��+int

-��(unsigned int

�d >�6(.�<���a[�<�����`����0����`73X���<+0:��3�+ #�(�:�� 3��D�C��+0+0�~p �� �'a[�<� � -��(Z:���(��<� !.�M&%+��

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)gd�7a� -�: M3��B !����a[�<� M����3������<3���`c� uF������+0+E����� ����a[���a*�����!���C�<�� -��(.+g��Ny3k���C��+unsigned int -��(

int������4z

ek} �$gd`<����a[�<�03V D���~a[����(���`����d -C�*:�� pC�<�c����30�Dp.���. ��0���0�<������+0����3� �3������ -��( a*��`��Ra[�<��+� wzek} 8.gd(��<�0��a[�c30�.� ��1b! � �X�h!$8X(+* �>82��#0� ���<������+0�<��3� �30�����6��NC R����a[���6��:��DpC�7�g���

b�_p.��32���<�����<+0��� �

3� M3�������#FNL���X+0�����b � � z

ek}R?5g�&X����3�� ���������� -��+,&V����+0� ��:;30�.:;3B��+X(��<3��<�������.�<(Zp*� DT�uF��( �*:��Dpi�<�V��N ��0��3������<3���`R�7u �������+E+0������+X����a[���a*�����D���3��<�� ��+, -��(Z���;�.:;3ca- ����� �p.���+,��N 3k�*�i��+

int -��(

unsigned intz

ek}"I$gd(��<30�<���������g3���� a- -�:��c�� -�����c��N.����3������� -F3k���C��+ ���6 B����a[��� �d -`���������e_:�+0����� B���������� -��g7�

2.2.13 Exercises

Exercise 7 � �/p��f�V�;�s* !�@�J�h,5* (;,.=>�>#0�V�����5,5���J!$# KL!$=f�V�;� K�!.*[* !$1��/#;@?�'&)(0=>� �����J!$#0�LW � � #�!$=hB �>=9�<!,.p�!$� B �J8Y���>* �h,cB.�[#;@ � ���[#0�V��A 1b�F�4,.p��9=>�>8�!$p��hBG�V�;�X�"(;, �h� � �V�4,5�31b� :;�h:u,5*/*dD6�[# � *d:uB �3K�!$=�V�;�F� ,5Zw�Y! K S�� �V�<�>= =>�',cBc,cS ��*d����D W ek}D�)g, c=a+7+--b

S c=-a=b� c=a=-b

B ++a++*b� a-a/b*bK a+=c=a=b

@ b*=++a+b� a-a*+-b� 7+a=b*2 � b-=-a/2

Z a+3*--b+a++* b+++--a

1 u;�<��`<��+0�� gB��� �*:����0��+!�[��: 3������� -( 3���� � ��� -���� M� � ��� +0� �*:�����`���+ ��N+ -��(

-��� 3�����QB�<3� -���+

+0��`73������y�

Exercise 8^ & ,.8Y�/# � �V�;�E�'& (0=>� �>���"!$#0��Kh=>!$8 ^ & �>=>�>�/����� K�!$=]pw,5*d�"B.����D W � !$=E,.# �/#Ipq,5*P� B

�'&)(0=�� �>���"!$#IA ,.=J@$:u� 13��DG��� �/�X�/#Ipq,5*P� BcW � !$= �V�;!.���6�'& (0=>� �>���"!$#0�X13���J�>� ,.=>�Fpw,5*d�"B.A_(0=>!$p� B �,Y�>�<�J(+H S DwH"�>�<�J(Q�>pw,5*d:u,5���J!$#IA ��:q(c(I!.�h�/#;@��V�4,5� �/#I�/���",5*/*dD

a�4,5�spw,5*d: �

5Ab

�4,5� pw,5*d: �2A ,.#�B

�V�;� pq,5*P:u�Y! Kc

�/�9:N#�B � { # �hBcW ek}D�)g

Exercise 9r !$8X(0:4�<�2S D �4,.#�BUS �[#�,.= D =>�"(0=>� ���>#0�J,5���"!$#0� ! K?�V�;�sKL!.*/* !$1��/#;@ B �h�>�/8G,5*3#I:N8?H

S>��=)�LW ek} �$g, �'I S �'o � � 8 ��q B �>] � �

Page 55: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����� � ����� ����� I�I

Exercise 10r !$89(0:;�<��S D2�4,.#�B2B ���>�[8�,5* =>�J(0=>�>���>#0�J,5���J!$#0�R! K9�V�;� KL!.*/* !$13�[#;@2S �[#�,.= D�#I:N8?H

S>��=)�LW ek} �$g, ���>];����� S �>]�]�]�]�];� � �����>];�>]�];� B �>];�>];�>];�>];�

Exercise 11 � �>��:N86�[#;@2,4H S ��� =��J(0=>� ����#0�J,5���J!$#IAf��!$89(0:;�<� �V�;�6S>�/#�,.= D���1k! � �6��!$89(+* ��82�>#0�

=>�J(0=�� ���>#0�J,5���"!$#0�6! K9�V�;��KL!.*/* !$13�[#;@�B �h�>�/8G,5* #I:48�S��>=)�LW ek} 8.g, P S � ? � �k# B q � �k8

Exercise 12\ = ���<� ,�(0=>!h@$=�,.8

celsius.C�V�4,5� ��!$#Ip���=)�V�k�<��8X(I�>=h,5��:4=>� � Kh=>!$8 B � @$=>���>� ��,5�cH

=>�>#0�;����� �[#0�<!2B �"@$=���� � r � *P���/:4�LW�m�;�M�[#I����� ,5*9!$:4� (0:;� �V�4,5�s(0=>!$8X(+�V�M�V�;�M:4���>= �<!7�>#0�<�>= �V�;� �<�>89(I�>=�,5��:N=>� �/# B �"@$=���� �

��,5��=>�>#0�;�>�/� �>�;!$:;*-B ,5*P��! ��!$#0�J,.�[# ��'&,�<� ,.#�B :;���C�<� S>!$:4#�B5�YK�!$=��V�;� ,5*[* !$1b�hB7�[#�(0:;�V�LW���;� ��� S�!$:4#�B5���>�;!$:;*-BES��U� �;!.����# ��: �>�Q�V�4,5� # ! !$pw�>=)HG,.#�B :4#�B �>=�� !$1��]�h,.# !����>:N=M�/#�V�;�F�h:uS)��� � : ��#0� ��!$89(0:;�J,5���J!$#0�hA�@�/p��>#U�V�4,5� �V�;� :4���>=X=>� �"(I�h� �V�F�V�;� S>!$:N#�B5�LW

�m�;�s(0=�!�@$=�,.8 �>�;!$:4* B !$:4� (0:;���V�;� `����E����`<3 =>�>��:;*P���/# B �"@$=���� � r �>*T���[:;�Y,5��,�8Y� &`�'BG=�,5H���J!$#�,5* #I:N8�S>��=G! K9�V�;� KL!$= 8

xy

9

13�/�V�x, y � � ,.#�B

|y| � 8W � !$=R�'&c,.8X(+* �>A

1349

��!$:4* B2S>�!$:;� (0:4� ���[8X(+*dD2,5�

13 4/9W ek} ?5g

Exercise 13\ = ���<�?, (0=>!�@=�,.8

threebin.C�V�4,5� =>�h,cB5�6, �hB �h�>�/8G,5* #I:48�S��>=

a � 0K�=>!$8

�>�J,.#�Bc,.=�B?�/#�(0:;�b,.#�B !$:4� (0:;�V�9�V�;� � -+E3c3��;����� S ���V��! Ka� � S>�/#�,.= D =>�J(0=>�>���>#0�J,5���J!$#�W��m��*[*_:5(

1����V��* �',cB.�/#;@ �5�>=>!.�X�[#Q�',5��� �V�;��S �/#�,.= D =>�"(0=>� ���>#0�J,5���"!$#C�4,5�f* � ���X�V�4,.#��V��=����6S �/�V�LW ek}R?5g

Page 56: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

I�P ������� ����� ���� �9��� �3� � � ���

2.3 Booleans�������i���h� ���J!$#CB.���L�>:;�>�L� �s�V�;�9��D (;�

bool:4���hB6�<!�=>�J(0=>� �L�>#0���s!!.* �h,.# pw,5*d: � �F!$=

�s!!.* �h,.#0�hA3KL!$= �>�;!$=)�JW ��!$: 13�/*/*3�����M, #I:N8�S>��=]! K2!>(I�>=�,5���"!$#0� !$#��s!!.* �',.#0�,.#�B 13��D !$#0*PDRKL�>1 ! K �V�;� �L� !>(I��=�,5���J!$#0�G��: � �����<!E�'& (0=>� �>�M,5*/* �V�;�]!.�V�;�>=)�LW��!$:R1���*[*I* �',.= #M�;!$17�<!6�>pq,5*P:+,5�<� �'&)(0=�� �>���"!$#0�k�[#Ip�!.*Pp��/#;@ �V�;� ��D (;�

boolA�:;���[#;@

+0�����03�� `����0`�:���3c�<a� ��:. �3������ W

��� M3"��+R30�.� +E���6�.���+E3 5cW W|3s���C� �[��:=`> �� 3������;/ ��NE� ^_N &,� 3������;/ ��N23k���C��+ ��� 30�<����+B��N3�������� a- -�:����� -������+ #23������ �[��: &%���j������p �p.�� `�������:;�z&V�~3�� 3k���C��&V����+0��a� ��:��d�� -��������+���6��3k� ���D`�����+0��+G3�+ ��NX�������C��+0+E��p.�� a- -�:��d���.~�[� S%����:. �p.�� # a- -�:���+ ��N,+0:�` � 3s���C��+D ����6a[�7�0��> -+G�43��=���7�.�0��+0����3 #X�7a[����&%��3�����:;3 +G�C����(������ -���z���������0� ����+E��:��0`���+��U$X�M&,�<a[�7� #c -�3�����:����+0:�`��3k���C��+, ����%:.+E��NL:�i���d`��<�03� -����`����0`�:���+E3� -��`���+ #*��3g��+ (���:;p.30NL:..&V���<3����<�g�[��:`� -� (�� !���3 ��N����3��<����+G3������ `����6�.:;3� �3������.+v&%��3��63������ � S%N�3��<�c -� #�3����<�0�V��+ ��� ���C�<�� �3�����������3������ ��30�.�7� 3��. -�3���� ��(�����3��~3s�[�{*� #���<3 :�+ ���7� �;�� �+0�j3����j �pC�'a[���:.�<+E3��������C��� M3 ��+y3����g+0���6� ���+E3y����� �_30���~aF�L -�5cW W43k���C�j�[��:

`> -�d3������;/ ��N0�ZSVN�3��7� 3����R �pC�'a[�B(���+0`�:�+0+0�����d&,�%`��<�03� �������6�. �a[�B�����B`> -��(���(. �3�� �v 3s���C�V&V�~3��d a- -�:��"�� ��.��� 3��. �3V`<���.+E��+E3�+X��Nv�7u� -`73���d3k&,�6��������<��3�+�� S 3XT.�0+E3V+0������3 #�+0:�`�� D3k�*�C�!�d >� -�[ ���� ����C�> M�%a[�<�0���������30��(y� c�<a[�<�03��������+0+ #.&,�"&V���C+0���!pi����'&x30� M3V��3% -���'&V+,NL���B�d ����d����3��<����+G3���������C�<�� �3�������+�� S%`<3�:. -��� #-+0:�` �d V3k�*�i�%��+ +0: �6`<������3g -+j Rp -+E��+jNL���g -�F/*����(�+j��N `����6�.:�3� �3�������+��[��:`> -� ���d -���������9e �c��`> -� #CNL���!�7u; -�6�.�� # 30� M3"����3������� -v�*:�� pC�<��+R`> -� pC� ���<������+0�<��3���(=��� p.���. ��0�NL�����d �3 #*3��. �3c��+ #�:�+0����� 3���� 3k&,� a- -�:���+

0 -��(

1������[� g

2.3.1 Boolean functionsb,�.� �. -��� ���g�*����> �� � +E3�����+BN������ 30�.� �j�0��3���+0� �d M3������d �3���`<�L -��} ��������� �g������Fe

1815�1864

g&V�����.���������<���<(=��� ��+E3� Mp ���+0�������6`���������`<3������.+BpC�73s&,�<���=�������` -��(=+E�*�Dpi�����` �����<p��� *� �j� 3����3��<�0� �s!!.* �h,.# K�:N# � ���J!$# &,� (�������3�� NL:��.`73������

f : � n → � # &%�.�7��� � := {0, 1} ��.(

n � � �e �c�> -(

0 -+ KL,5*P��� -��(

1 �+ ��= :u� � g

5,��> ����� 3����6��:.� pC�<�!��N (���hi�<�0����3 �g������> -�=NL:.��`<30������+ ��+!T.����3��DNL��� �<a[�<�0�=T�uF��(nzj1 u;�7� �

`���+E� ��? -+G/F+ �[��: 3�� +0���'& &V�. �3 �7u; -`<3�~� 3�������� ��:.� pC�<� ��+�� b � ���~a[�6�[��:4 �T���+E3D������3 � ;���n = 1

3����<��� ����!���.~��NL��:;� �g������> -� NL:���`<3�������+ #.3����!3k&,�6`�����+E3� ���3BNL:���`<3�������+c0 : x �→ 0

-��(c1 : x �→ 1

#�30�.� ��(�����30��3k�=��(: x �→ x

-��( 3����6�����[ �30����� VARb: x �→ x

#�&V���<�0�0 := 1

-��(1 := 0

�^_�Z3����!NL�����M&%�����D&,� ����+E30�0��`<3V��:;�%NL�*`�:�+X30� p.���. ��0���g�*����� -�ZNL:���`<3�������+ #�3��. �3X��+ #�NL:��.`73�������+

N������ � 2 3�� � �jS%+ � 2 `�����+0��+E3�+ ��NnNL��:;�,��������<��3�+ ������ #�+0:�`��Z NL:���`<3������d��+ ����+E3g`�����a[�<�.������3�~�(���+0`<�0��pC��(= -+ d+E�d -� 3� �p.�� 3��. �3R���+G3�+V3���� NL:.��`<30����� a- -�:���+RNL���" -���i��+0+0��p.�� ��0��:.���<��3�+�� SV��7u; -�6�.�� NL��� p.���. ��0� �g������> -� NL:���`<3������ ��+!S %Q

: (x, y) �→ x ∧ y+0���'&V� ��� �����:;��� ?ce $g7�

^ 3 ��+ �. -����( S XQ pC��`> -:�+0�x ∧ y = 1

��N, ��.( ������ ��Nx = 1

,.#�By = 1

��x2��: �d �� ��:���+0+&V��� 3����DNL:���`<3������

f : (x, y) �→ x ∨ y(��<T.�.�<(=��� �����:;���D?ce p4gB��+ `� -����( A � � ^_� N -`<3 #n3����<�0�

���� 3k&,�6�C��+E+0��p.�� ����3��<�0�����73� �3�������+X��N 30�.� &,���0( �E��� � �3x2��: `> -� ���> -( ��3V -+ �0 �3R��> �+E3B����� ��N�� #p.:;32rs:�+E3% -+,&,���y��3,`> -�����> -� �E�<��3����<� ����������� #F30� M3X��+ #��E�7u� �`<3���d����� ��N��;�jbc��� NL:��.`73������ 30� M3

Page 57: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � I�o

`����0�0��+E�C����(�+c30� 30�.� L �3E3��<� ����3��<�0�����73� �3������d��+,+0���'&V� ��� �����:��0�B?ce_`)g7�j^ 3c��+ :�+0:. -���6�0��NL�<�0���<(�3�� -+��XA �

: (x, y) �→ x � y��� � &`� *d:;���[p��6!$= �

x y x ∧ y

0 0 0

0 1 0

1 0 0

1 1 1� �� �����G

x y x ∨ y

0 0 0

0 1 1

1 0 1

1 1 1� 8����� G

x y x � y

0 0 0

0 1 1

1 0 1

1 1 0� �������� G

x y x ↑ y

0 0 1

0 1 1

1 0 1

1 1 0� @��� ���� G

Figure 4:^ & ,.8X(+* � ��K�!$=�S �/#�,.= D �s!!.* �h,.#RKh:4# � ���"!$#0�LW

Completeness. �����:��0�=? +0���'&V+ rs:�+E3Z NL�<& �7u� -�6�.��<+��O$%�'&,�<a[�<� #R��� `��<�E3� -���U+0�<�.+E� #"�~3

+0���'&V+ �[��:U�7a[�<�0�*30�.���.�4 �pC��:;3dp ��� M�0� �g�*����> �� NL:��.`73�������+��O{*����� ��N!3�����+E� NL:��.`73�������+� M���+0�ZNL:���(. -������3� -v3��. �3 ��p��>= D p.���. ��0� �g�*����> ��=NL:���`<3������ `> �� pC�6�������<�� M3���( N�������3������ � ;����7u; -�6�.�� #c`�����+0��(��<�d3���� NL�����M&%����� NL:��.`73�������`����6�C��+0��( ��N"S %Q -��(��%A � �

f : (x, y) �→(x ∧ y) � x � y

��e_SV+ �[��:&V��� +0���'&U��� 1vuF�<��`���+0�D�'I #��XA � ��+, �+0+0�*`<�L �3���a[�V -��( ������`��R3����<���B��+���d�.�<��( 30��NL:��E3����<�R� M������30�.�<+0� � � 3���� �7u*������+0+0�����n� g ^ 3B��+B�> -+E����Z+E����� ��� 3��. �3 f = x ∨ y

#i3��. �3��+ #gA � `> -�zpC�d�7u*������+0+0�<(w -+D `<���6�C��+0��3������ ��N��XA �H ��.( S %Q!� {*������L ���~� # 3����dNL:��.`73������ XS XQ

: (x, y) �→ x ↑ y(���+E`<����pC�<( ��� �����:;��� ?ce (4g `> -� pC�6� uF������+0+E��(4 -+"3����6`����6�C��+E��3������

VARb�� S %Q e_������`��"3���� �. -��� �>��� g7�jmy�<3%:�+cNL�����d -�~�6(��<T.��� &%� M3c&,� ���> -�dp*� �E�7u*�.�0��+0+0��( -+X D`<���6�C��+0��3������ �;�

Definition 2r !$#0��� B �>= ,C�L� �

F! KMS �[#�,.= D K�:4# �>���J!$#0�],.#�BU* �>�

πx : (x, y) �→ x,.#�B

πy :

(x, y) �→ yB �># !.�<�9�V�;� p.���. ��0� �.�0�[rs��`73�������+ W ���;�f��� ���

(F)! K Kh:4# � ���"!$#0�

generatedS D

F���

=>�h�>:4=)���[p�� *dDMB � { # �hB ,5��K�!.*[* !$13�LW

� F � {πx, πy} � �(F)

W

� � !$=F,.#IDf1, f2, f3 � �

(F)Am�V�;� Kh:4# � ���"!$#

f : (x, y) �→ f1(f2(x, y), f3(x, y))��� �[#��

(F)W

� !$= , ��� � � ! K S �/#�,.= D Kh:4# � ���"!$#0��A_,s���>�F! K S �/#�,.= D Kh:4# � ���"!$#0� ��� �L,.� Bs�<!fS>�

complete� K

,.#�B?!$#0*dD � Ki�>pw�>= DbK�:4# �>���J!$#f � � �h,.# S�� @c�># ��=�,5�<�hBRS D

F���/# !.�V�;�>=s1b!$=�B5��A�� K!� � �

(F)W

� �"� �a[� +0����� MpC�Ma[� 3��. �3%A �)`> -� pC�"���<�.�7�� �3���(�N������{S %Q

,�XA �

} �+

�XA �(S XQ

(x, y),�XA �

(x, y)).

b�� ���6�.��M� 3����d:.�. ��E� NL:.��`<30������ %A b �+ �������<�� �3���� #v&,�d`�����+0��(��<�D��3�+ �Gp.���. ���� � �3������ � VARb

2 : (x, y) �→ x3��. �3������.���0��+n30�.�j+0��`�����(D �����:�������3>�y� �g`� -� 3������ �7u*�.�0��+0+ XS %Q

(x, y) = VARb

(S %Q

(x, y))NL���0�d -���6 -+

VARb2(S %Q

(x, y), πy(x, y)),�#"%$� ��B �&� ��:���( �!� �='#' � 3<�( ��&�E� �!���D�#8�'�� ��� � 8��� ��6����! �� �(3?�6� �! � � ����G

Page 58: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

I�# ������� ����� ���� �9��� �3� � � ���

���X+0���6�.��d -+

VARb2(S %Q

(x, y), y).

$%�<�0�j3���� ������2��N�3����j������rs��`<30������+ypi��`�������+y`���� �� �y3����<�" -���'& :�+ 3��X:�+0�j3����2�����������. -[ M����:�������3�+x -��(

y��� ��:;�R�������<�� �3������6NL�����D:�L -+��%^_��NL�����d -��� #;&,� `> �� 30�.�7����NL����� +� ��Z3��. �3B NL:��.`73������ ��+

�������<�� M3���( p�� 3����D+E�<3F��N2��3R`> �� pC� �7u*�.�0��+0+0��( p�� �NL����� :�L 30� M3R���.~� `�����3� -����+

x, y#y ��.(

3���� NL:.��`<30������+XN������F�

������(����0y 3j&,�V������(d3����V��3����<� p.���. ��0�Da[�<��+E�����d��N VA b 3��. �3 �����.���0��+g��30+ { =)�>� �����:�������3 ��g��`> �:.+E�"&,� `> -�Z�������<�� �3��!�~3XN��0��� VARb

2

-��(�3����R������rG�<`<3�������+c -+ VA b2(y, x)

�� �! ���� �.�'&)�����<� �����(�NL���V `����6�.��<3��<�.�<+0+ �.�0�*��N �

Theorem 1���;���L� ��! K K�:4# �>���J!$#0�

{S %Q

,A �

, VARb

}��� �h!$8X(+* � �<�XKL!$=G�V�;�2���>��! K2S>�/#�,.= D

�s!!.* �h,.#?Kh:4# � ���"!$#0�LW

Proof.S%���Dp ��� M�0� �g�*����� -� NL:���`<3������

f��+2`����6�.��<3���~� (���+0`<���~pC��( p�� ��30+ �>�4,.=�, � �<�>= �/�>���J�spw��� H

�<!$=(f(0, 0), f(0, 1), f(1, 0), f(1, 1)

� ����g�7u� ��6� �� #[S %Q �. -+j` �. ��� -`<3��<�0��+E3���` a[��`73����(0, 0, 0, 1)

#���

0001NL��� +0�����03>� my�<3

fb1b2b3b4

(�������3�� 3���� �g������> -� NL:���`<3������=&%��3�� `�� M�� -`<3��7����+E3���` a[�<`<3����b1b2b3b4

� ����X�7u; -�6�.�� #FS XQ= f0001

�^_� 3����,T.�0+E32+E3��<����N.3����c��������N #�&,�X+0���'&w3��. �3j -�F3�����+0�cNL:��.`73�������+ `> -� pC�,�������<�� �3���( &%����+0�

`��. ��� -`<30�<����+E30��`Ba[��`<3����%`�����3� �����+X +0��������1�j^_��(�����(�#

f0001(x, y) =S %Q

(x, y),

f0010(x, y) =S %Q

(x, VARb

(S %Q

(x, y))),

f0100(x, y) =S %Q

(x, VARb

(S %Q

(x, y))),

f1000(x, y) = VARb

(A �

(x, y)).

b��"` ����`�/ 3����%NL�����D:�L VNL���f0010

#�NL��� �7u; -�6�.�� #�&,�X`> -�6���6�.��'� 3����c` �. ��� -`<3��<�0��+E3���`,a[��`<30����+ -��( ����.���3���� ����a[���a[�<(ZNL:��.`73�������+ 3�� 3������ S �/��13�/��� e ����`� -�C3��. �3

x = πx(x, y)g��

S XQ(πx(x, y)︸ ︷︷ ︸

0011

, VARb

(S %Q

(x, y)︸ ︷︷ ︸0001

)

︸ ︷︷ ︸1110

)

︸ ︷︷ ︸0010

^_� 3����R+0��`<���.( +E3��<� #F&,�R+0���'&U3��. �3c -���dNL:���`<3������&%�.��+E�B` �. ��� -`<3��<�0��+E3���`Va[�<`<3����c��+,����� � �<���`> -�pC�R�������<�� �30��(y�jb,����+,��+ (������Rp��d`���� p ���.���.�"3����" �����> -(;�����<�.�7�� �3���( �E+0����������

1� NL:���`<3�������+

3��;����:���� A � #F&%�.��` ��+0���6�.��� �(.(�+c:;�Z3��������1y@+<� ;���%�7u� -�6�.���#

f1100(x, y) =A �

(f1000(x, y), f0100(x, y)),

f0111(x, y) =A �

(A �

(f0100(x, y), f0010(x, y)), f0001(x, y)).

� �D �p.+E3� -��� N������ &,���0/F������3�����+R ��0��:.���<��3R��:;3RNL�����d -�~� # +0����`�� &,� pC������<a[� 3��. �3B�[��: ���<3 ��30+��(��> *�

Page 59: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � I�q

����. -�~� #*&,�"���<�.�7�� �3��f0000

-+

f0000(x, y) =S %Q

(x, %A b

(x)).

1vuF�<��`���+0� �'oR -+E/*+2�[��: 30�"+0���'&w3��. �3v3����X+E�<3�+{S XQ

, VA b

}#{A �

, VARb

}#� -��(6�7a[��� 3����c+0�<3

3��. �3R`�����+0��+E3�+B��N 3���� +0�������� NL:���`<3������{ XS %Q

} ���� `����6�.��<3��"NL���R3���� +0�<3 ��N2p.���. ��E� �g�*����> -�

NL:���`<3�������+��

2.3.2 The type bool^_�D5cW"W # �g�*����� -��+� ��0�g���<������+E����3��<(Dp��"3���� NL:���(. -������3� -�3k�*�C�

bool�v^ 3�+ a� -�:.�2�� -�����g`<���.+E��+E3�+

��NC3����B3s&,� �<���������3�+ ��= : � ��.( KL,5*P��� 3��. �3c ����R -+E+0�*`��� �3���(�&V�~3���3����B���3��<�� -�+true

-��(false

#����+G�C��`<3��~a[����[�� ;���V�7u; -�6�.�� #

bool b = true;(��<T.����+% a- ����L �p.��

b��Nn3k�*�C�

bool ��.( ������3��L ��� � ��+g��3,3�� ��= :u� �

;�����d -��� #M3���� 3k�*�C�bool

��+ -� ����30������ -�3s���C� #[(��<T.����( 3��BpC�,��<+0+ �������<�� -F3��. -�int

e &V����`�����3�:;���Z��+c���+0+c�������<�� �n3��. -�

usnigned int#�+0��� {*��`<3������ �*� �*�9#.g �

Logical operators.b,���2`<���6� ��<3��v+0�<3n��N�p ��� M�0� �g�*����> -� NL:.��`<30������+n��+y >a- -��� �p.�� aF�L g30�.� * !�@$�"�h,5*

!>(I�>=h,5�<!$=)�&&

e_S %Q g�#||

ekA � g�#V ��.(!

e VARb g7� 5,���6� ��0��( 3�� 3���� ����3� M3������w:�+0��( ���{*��`<30����� �*�@8F����&,� +0���6� ~� ��(.�<��3���N��

1&V��30� ��= :u� -��(

0&%��3�� K ,5*T��� � �g��3��

&& -��(

|| ����

p.���. ��0� ���C�<�� �30����+ #*&%�.����!��+ :��. ��0�[� SV�i���i�<�� -��(�+, ����V�0a- -�:���+ ��Ny3k�*�C�

bool#; -��(� ��i�������`� -

���C�<�� �3�����+! -�+0����<3�:;��� �0a- -�:���+"��N 30�C�bool

�mn��/[� ��� �������`�+ #&&p.����(�+"�����0� +E3E���������� 30� ��

||#� -��(

!p.����(�+c�����0� +G30�����������3��. -�

&&�<���

Relational operators.b,���<��� ��+� -�+0�% X��:.� pC�<� ��N;���C�<�� �3�����+ ��� �����3������<30��` 3k�*�C��+n&V����+0�g�0��+0:��3

��+V��N 3k�*�C�bool

� ;���R�> -`��= M����3������<3���`R3k���C� 3����<��� �7uF��+E3V3���� +0� u =>� *-,5���J!$#�,5*3!>(I�>=�,5�<!$=)�<#>#

<=#>=#==#. -��(

!=�\b,�.�<+0� ����Rp.���. ��0����C�<�� �3�����+,&V����+0� 3s&,�D�0a- -�:��!���C�7�� -��(�+% ��0�!��N +0�����

����~3������<3���` 3k�*�C�6 -��( &%����+0� ����+E:.~3 ��+ -� �0a- -�:��6��N 3k���C�bool

��bc���6���C�7�� �3�����+<= -��(

>=`����0�0��+E�C����( 3��63���� �d �30�.�<�d �3���`> � ����L M3�������+ � -��( � # �0��+E�C��`73���a[����[�%bc��� ���i�<�� �3����==3��<+E3�+

NL���X� �*:. -��~3s� ��.(!=3���+E3�+cNL���V���.� �*:. -���3k�[�

{*����`��bool

��+v -� ����30������ -�3s���C� #�3����g�0��L �3������ �����C�7�� �3�����+ �d �� -�+E�V�. >a[� ���i�<�� -��(�+ ��N;3k�*�C�bool

�jb,�.�R����+G�C��`<3��~a[�!`����6� �����+0����+, ���� (.�����" -`�`����0(.���.�D3�� 3����"`�����a[����30����� KL,5*P���<��= : � �

Watch out!S|N���� �*:�����3!pC�����������<� y + ����+E3� �/[� ��+R3���:�+0�D3���� �+0+0������������3"���i�<�� �3����

=&V���<���R3���� � �*:. -��~3s�d���i�<�� �3����==��+c���> -��3>�

SV+" d���<�.�7�� -v��:��� #C�������`> - ���C�7�� �3�����+R�. �a[� ��M&,�<�R������`<��(�����`�� 3��. -� ����� �3������. - ���i�<�� �3����0+&V����`�� ����3�:;��� � �a[�"��M&,�7�X������`<��(�����`��"3��. -�Z �����3������<30��`V���C�<�� �3�����+��� ;���X�7u� -�6�.���#

7 + x < y && y != 3 * z

��� ����6��'�' �� �6 �� "�=� ��� �6��(��8��� �@�� � �(��� �DD���( ��'�A ����� ��� ��=������F�#3 �#��F���=�*��� ����� � ����� ����@�� ����(G

Page 60: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P�] ������� ����� ���� �9��� �3� � � ���

��+c�������`> ���� � ��0����3�����+E� � ��( �+

((7 + x) < y) && (y != (3 * z)).�g�g`� �����NL:��&%��3��"�d �3������d �3���`> -M+0�����03�`�:;3 ����3� M3������ +0:�` �D -+

a = b = c� SV+ X5cW"W �7uF�����<+0+0������#

a == b == c��+c����3X� �*:���a- -�����3X3��

a == b && b == c.�j� ���N�3 -+0+E�*`��L M3���aF�~3s�w��N

==#B3���� �7u*�.�0��+0+0�����

a == b == c��+ �������`> ���� � �������3�����+0� � ��(x -+

(a == b) == c�2^_Ni -�;��N

a#b#� -��(

c ����,a� M���L �p.���+ ��N.3s���C�

int&V��3�� a- -�:��

0#[30�.�c�<a- -�:. �3������

�F�����(�+

(0 == 0) == 0 −→ true == 0 −→ 1 == 0 −→ false ,rs:�+E3X30�.� �����C��+0��30� ��N &V�. �3,�[��:Z:�+0:. -���d���� -�p��

a = b = c�

;��� ������� (��<3� ����+" �pC��:;3!������`<��(�����`���+D -��( -+0+0��`��L �3��~aF��3�����+R��N,30�.� �������`> -2 -��( ����� �3������. -���C�<�� �3�����+ #�+0��� b� �p.�� �*�uxj��:!�d >�RT.��(!3�����+ ����NL�����d �3������R������.NL:����� ����(��<� 30�%+0���a[�g1vuF�<��`���+0�B�>q -��( 1 u;�<�0`���+0� ��]F�

Description Operator Arity Prec. Assoc.�������`> �i����3

!� �>P ��������3

���+0+<

� ��� ��<N�3�����> �30�<�

>� ��� ��<N�3

���+0+c���X� �*:. -<=

� ��� ��<N�3�����> �30�<�%���X� ��: �

>=� ��� ��<N�3

� �*:. -���3k�==

� �>] ��<N�3����� �*:. -���3k�

!=� �>] ��<N�3

�������`> �C -��(&&

� P ��<N�3�������`> �i���

||� I ��<N�3

Table 2:a =>�h���'B �># ��� � ,.#�B ,5�>��!��>�",5���[p�����"� �O! KE* !�@$�J�',5*G,.#�B =�� * ,5���"!$#�,5*�!>(I��=�,5�<!$=)�LW � */*!>(I�>=h,.#�B5� ,.#�B6=>� ��:4= #�pq,5*P:u� � ,.=�� = pw,5*d: � � W

Conversion and promotion.^ 3,��+g�C��+0+0�~p ��X3��. �3 pi��3��d���C�<�� -��(�+ ��Nn "����� �3������. -.���C�<�� M3���� �. �a[�

(���hi�7������3g3s���C���2b,�.��+ `> -+0�B��+g30���> M3���(���63����B+� -���c&c >�6 -+ NL��� 3����B ��0��3������<3���`,���C�7�� �3�����+<�jb,���`����6�C��+E��3��,�7uF�����<+0+0�����d��+j�<a� ��:. �3���(����63����V�����0�X�������<�� - 3k�*�i� #�3��"&V����`��63����%���C�7�� -��(���Ni3�������+E+ ���<�.�7�� -�3k�*�i�D��+B���6�.���`���30��d`�����a[�7�03���(y�"^_� � ��03���`�:�L �� #

bool���C�<�� ��.(�+R ��0�D`<����a[�<�030��( 3��

3����,����+E�C�<`<3���a[�X����3��<���� -;3k�*�C�X��N 3����X��30�.�7�g���C�7�� -��(y� $%�<��� #[3����Xa- -�:�� KL,5*P��� ��+2`�����a[�<�E3���(63��0#

-��( ��= :u� 3��1� ^_N�3���� ����30������ -C3k�*�C�"��+

int#;3�����+X`<����a[�<��+E����� ��+%(��<T.����(�30� pC� (0=>!$8�!.���J!$# �

S|����������3������ ��+" +G�C��`��L �2`<����a[�<��+E����� NL��� &V����`��=30�.� 5cW"WO+E3� -��(. ���(=��: M�� -��30����+"30� M3!�������NL�����d �30�����d���<3�+c���+E3>�bc��� `�����a[�<��+0�����=���*�<+B����3��630�.�!��3����<�R(�������`<30����� NL���R�������`> -n���C�<�� �3�����+��R^_� ���~uF��( �7uF�����<+��

+0������+ #[3����%����3������� -����C�<�� -��(�+g��N �������`> -����C�7�� �3�����+j ����X`�����a[�7�03���(�3��bool

���6+E:.`�� &c ��D3��. �30��+X`<����a[�<�030��(Z3�� K ,5*T�L� -��( -�����3����<�ca- -�:��"��+X`�����a[�<�03��<(Z3�� ��= :u� �

Page 61: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � P;�

bc����+E�g`�����a[�<��+0������+ -�+0�,3� �/[� �.L -`�� ���"������3��L ��� � �30������+ -��(! -+0+0������������3�+ #M -+n���"30�.�2NL�����'&V���.��7u; -�6�.���+��

bool b = 5; // b is initialized to true

int i = b; // i is initialized to 1

2.3.3 Short circuit evaluationb,�.�%�<a� ��:. �3������ ��NC�7uF������+E+0������+ ����a[���aF�����"�������`> -� ��.(6�0��L �3������ �.���i�<�� �3����0+j�����*`<����(�+ -`�`<����( ������63��63���� �������<�� -���:����+ #C -+B(���+0`�:�+0+E��( ���={*�<`<3�������+ �*� �*��� -��( �*� �*�98F�%$%�'&,�<a[�<� #i3����<�0� ��+V��������6�C���E3� -��3 (.�~hi�<���<�.`<�"�����[ M��(������ 3����!���0(.�7�%��� &V����`���3����!���i�<�� -��(�+X��N -�Z���C�<�� �3����% ����!�7a� - �:. �3���(y�V�������� ��� ���<�.�7�� - 3�����+V���0(.�7�R��+V:���(.�7T ����(�#i3���� p.���. ��0���������`> � ���C�7�� �3�����+

&& -��(

|| -�&c ��*+X��:. ��� ���3����R3��. �3,3��������X���N�3X���C�<�� -��(Z��+c�<a� ��:. �3���(�T���+G3>� �������<�Ma[�<� # ��N 3���� a- -�:�� ��N�3����`����6�C��+E��3�� �7u*������+0+0�����=��+R -~���> -(;� (��<T.����( p�� 3���� a� ��:��D��N 3���� ���N�3R���C�7�� -��( 3������ 3���� ��������3���C�<�� -��( ��+ # !.�b�>pw,5*d:u,5�<�'B M3c -�_� b,����+ �<a- -�:. �3������d��+ /*���M&%�� -+ �>�;!$=)�b�>�[=>�>:4�/�k��pw,5*P:+,5���J!$# �$%�'&\`> -�4��3D�. ����C��� 3��. �3 3����dT.�. - a- -�:�� ��+ �����> -(;� (��<3��7����������( p*� 3���� ���N�3 ���i�<�� -��(

���������{*:����C��+E�c3��. �32��� -�&&���i�<�� �3���� 3����c���N�32���C�<�� -��(6�<a- -�:. �3���+v3�� KL,5*P��� z[3������ �.�"�d �303��7�

&V�. �3 30�.�R��������3,���C�<�� ��.( ����a[��+ #F30�.�B���<+0:��3,&V���i -�&c ��F+ pC� K ,5*T��� �g$%�<�.`<� #F3����<��� ��+,��� ������(3���<a- -�:. �3�� 3���� ��������3R���C�<�� ��.(= �3" -�_�"b,�.�D -�. -����+E��3�:. �3������ ��`�`�:;��+ ��N ��� -�

||���C�<�� �3����B3����

���N�3X���C�<�� -��(��<a- -�:. �3��<+c3�� ��= : � �S 3 T���+E3 +0������3 ��3!��*��/*+ -+!��N +0�����03 `��~��`�:���3 �7a� -�: M3������ ��+"���<������= ��d �3E3��<�"��Nc� �6`����<�.`7�[�

�g:;3"30�.�7��� ��+" ��.��30�.�7�"pC�<�.�7T.3�� ^ 3 ��`�`�:;��+"&%�����=(��> -������d&%��3�� �7uF������+E+0������+ 30� M3! M��� (��<T.����(NL��� `��7�03� -���6� ��� -���<3��<�0+g������[� 5 ����+0��(��<� NL���,� u� -�6�.��,3����%����(.:��:�+2���C�<�� M3������ 3��. �3g��+g(��<T.����(NL���% D����� � �<��� (.�~aF��+0���c������[� QB:�� 30� +0�����03X`�����`<:.�~3X�7a� -�: M3�������#*&,� `> -��&X����3��

x != 0 && z % x > y

-��( pC�j+0:;���g3��. �3 3�����+ � uF������+0+E����� ��+ -~&c >�*+n&,�<��� (��<T.����(y� ^_N�3����g��������3����C�7�� -��( &c -+��7a� -�: M3���(NL���

x==0# � � 3�������3����R����+0:��3c&,��:��(pi�":���(��<T.�.�<(n�

2.3.4 Predicatesx2��:=�d �� -+G/ &V��� 30���0��� �������`> - ���i�<�� �3������.+R M��� �.�0�Ma*��(���(�#n���~a[��� 3��. �3 S XQ| -��( VA b #y����<a[��� XS %Q4 -������ &,��:��( +0: �6`<��� bc���g�0�> -+0��� ��+n3k&,��NL���(��n��� 30�.�j����� �. -��( #M3��;����� ���i�<�� �3������.+�����'aF��(��c������� !.�7u;��p.�����3k�!3��"`<���> �30�X������� ���� -(. �p.��c -��(6+0�����<3�������+v -�+E�"������� � �6`����<��3 �������`> -�7u*�.�0��+0+0������+���S ���������� -� ��� &V����`�� -�j�������`> - ���C�7�� �3�������+! ������7u*�.�0��+0+0��(�# +� �� #v��� 3��7����+ ��N XS XQ|&,��:��( pC� �. ���( 3����0�> -(y�dAB� 30�.� ��3����<� �. -��(�#nS %Q #vA � ��.( VA b� ��0� 3���� ����+E3N���� ��:�����3�~��:�+0��(��������`> -C���i�<�� �3����0+ #;+0� �~3X�d M/[��+X+E����+0�"3�� �. >a[�R3������H(�������`<30�� �a� -��L �p.����1vu*������+0+0�����.+j��N 3k�*�i�

bool ����c`> -����( (0=��hB.�J�',5�<� � �jbc���"!.�7u;��p.�����3k� ��N pi�������! Mp ��,30�!`����*��+0�

�����j��:;3 ��N*�d -���R(���hi�<�0����3 � �*:���a- -��<��3nNL�����D:.� �3�������+i��+ a[�<�0� ���6�C���03� -��3y �+E�C��`<3 ��N*������(���`� �3���+�� ;���%���.+G3� -��`�� #F3���� �.�0��(���`> �3��

3 * x / 2 - 4 < 0

� �����)$��� � ����� �� ��'��#BA �=� ��� �6��=��9 C ���)�� " �� C ���� ��������=��� �����=�� �� :�3<�=� x���

0�

Page 62: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P � ������� ����� ���� �9��� �3� � � ���

`���:��(pC�"� �*:���a- -�����3���d�7u*�.�0��+0+0��( -+

3 * x < 8

Nota bene:b,�.��3��7��� � � :N�/pw,5* �>#0� ��+D:�+0�<(z��� 3�����d M3������d �3���`� -v+0����+0����<����� S%+ &,��. �a[�

+0���<� ��� 3����%���������� -�fahrenheit.C

���{*��`73������ �*� � #���3g��+jp��6��� ���> -��+2��: M�� -��30����(�3��. �323s&,��d �3������d M3���`> -��� � ��:���a� ������3 �7uF�����<+0+0������+6�F�����( 3����Z+� -��� ����+0:��36&%�����w�<a� ��:. �3���(� -+d5cW W�7u*�.�0��+0+0������+��bc���" �pC�'a[� &c M��������� -~���> -(;�d+0:�������+E30+c3��. �3,3����<�0�"��+c��� �� -+E�� -��(��������<�� �y&c ��d3�� ` ������+0�

3���� �G��������3 �"NL�����D:�L �3������D��N ���~a[��� ������(���`> M3���� {*�����<30������+ �G��������3�� ���> -��+ �E�> -+0���<�j30�"���> �(6���:���(.�7��+E3� -��( � #�+0�����<3������<+2�~3g���> ��.+ �E�������c� �6`�������3 30� �<a- -�:. �3�� � #� -��(�+0�����<30������+v3����<���X�d >�pC�V��30�.�7� ��p.rG�<`<3���a[��+<�2{*�����<3�������+ +0�7a[�<�� -i+E:.`��d���[ -�+j`> -�6pC�V -`��.���<a[��( �3g30�.�X+� -���c3������ #�p.:;3������� ��N�30��� 3����<� M��� ��� `���� ! ��`<3>�"^ 3R��+ #CNL��� ����+E3� -��`���#i����3R:.��`����������Z30� M3B���> -(. �p.����~3s� -��(� � `�������`<�����<3B����3�� �> �` � ��3����<� y +X&c ��[�cbc���!���������� -�����<�,�. -+%3�� (.�<`���(�� ��� ���<�V���������0��3�����+,��� `> -+0��� p*� � `> -+E�!p -+0��+��

�g����'& &,�B(���+0`<�0��pC�B+0�����V+E���6�.��c3E�� -��+0NL�����d �30������+ -��(d+0�����V��:���(�������.�<+g3��. �3 �����B+0����:��(3� �/[� ����3�� �`�`���:���3>�2SV+,&V��30�Z -�C��:���(����������+ #F(�� ����3XNL�����'& 3������\p.�����(���6p.:;3%`�����+0`<����:�+0��[�

De Morgan’s laws.b,���%&,����� /F���'&V�6NL�����D:�L -�X��NC�.�'& 30� �7uF�����<+0+,S %Q ����3��7����+g��NnA � ��.(

aF��`��ga[�<��+0 X&V��30�!3���� ������ ��N VARb #� ���� �. -���<( -N�3��<��3���� �j����30��+0� �d �3������d M3���`��L ��BSV:���:.+G3�:�+ QB��������[ -�Re0�>#�]�P � �>#[oF�)g7� $%�c&c -+ R�.���������<�j����+E�F� pC�����`, -����<p��� -��(��������`�+<� SV�+0� 3����X������������:�+NL�����D:�L �3������ ��N��E�d �3������d �30��`> -F���.(�:�`<3������ �! -+g&,�%/*���M& -��(�:.+E�B��3g3���(. >� ���*�<+ p �`�/ 3�� ����� �b,�.� (���� �����0�[ -� � NL�����D:�L -�R+E3� �30� 3��. �3ke_��� 5cW"W � L ��.��:. -��� g

!(x && y) == (!x || !y)

-��(

!(x || y) == (!x && !y) .

b,�.�<+0� NL���0� :�L -� `� -�=��N�3��<� pC�D:�+0��( 30�30�� -��+0NL������ 6�.�0��(���`> �3�� ����3�� �E+0���6�.��<����� �*:���a- -�����3������(���`> M3���� � �D&V��� ���� ~� 3�������&%���<���<a[�<� ��������������L �3�� &%��3�����:;3R�7uF�.���`���3R������3������������;� ;����7u; -�6�.�� #

!(x < y || x + 1 > z) && !(y <= 5 * z || !(y > 7 * z))

`> -��� �*:���a- -�����3����pC�R&%�0��303����� -+

x >= y && x + 1 <= z && y > 5 * z && y > 7 * z

&V����`�� ��+R -+B� � `�������3" -+B3���� �����������. - NL����� :�L M3������ -��( `���> M����������<NL�<�� �p.�� ��� 3��<����+%��N2���� -( � �p.����~3s�[�

Prefer multiplication over division.AB�.� ���� -+0��� ��+V� � `�������`<�Z+0����`�� ��� �d -����.L �3�NL���0��+X�D:���

3����.���`> �3������ ��+ `�����+E3� -��3 N �`<3����be_+� �� #FNL��:;�'gj30������+gN �+E3��<� 3��. -�d(���a*��+0�����y� 5 ��> ��0�� 3�����+j3s���C�B��N �����:�������3V�. -+V3��6pi� `�����+0��(��<����( `> M����NL:���� # -+B��3B����a[���a[��+B �+0+0:��6��3�������+% MpC��:;3V3���� �.L �3�NL�����3��. �3c�d ��d���%�d ��d����3cpC� 3E��:��"���� -��� `�����`<���73��"���6� ���������3� �3������y�

Page 63: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � P�8

SV����3����<�g�0�> -+0���6��+j3��. �32&V�����6`<���6� :;3����.�R&V�~3�� ����3������<�0+ #��D:��3����.���`> �3�������+ ����X`> ��0������(���:;3�7u; -`<3���]e_:;� 3����'a[�<� �V -��(=:���(��<� !.�M&�g�#C&V������ ����3������7�!(���a*��+0����� ����3E���*(�:�`���+R�<�0�0����+!`����6� ��0��(3��D3����"�d �30�.�<�d �3���`> � (���a*��+0������#*+E��� {*��`73������ �*� �*�@?;�

;���V�7u; -�6�.�� #*&%�.�<� �[��: �. �a[�"�d �30�.�<�d �3���`> � (���a*��+0��������������.(�#*30�.�R������(���`> M3��

(x - 2) / (y + 3) < z / 5

��+,pC�<3030�<�X�0��NL�����D:.� �3���(d3��

5 * (x - 2) < z * (y + 3).

X��3��X3��. �3g3����%3k&,� a[�<�0+0������+ ����%�.��3 �<a[����d �3������d �3���`> -���"� ��:.�~a� -�����3 e 3����%T���+E3 �����<(.��`> �3��X��+:���(.�7T ����( NL���

y==−3g7� �g:;3R��<3R:�+B`�����+0��(��<�B3�����+V -+B�[�<3 -����3����<� �����:�������3V��� N �a[��� ��N 30�.�

+0��`<���.(Za- ����� -��3>�

Avoid roots.� �,(���( ����3 e �[�<3 g�(.�<+0`<����pi� �.�'&43��B`<���6� :;3��j���*��3�+���� 5XW W � �g:;3v��73 :.+ �����> -(;�

(���+0`�:�+0+,&V���d3�� �a[����( 3������O&V���<���R�C��+0+0�~p ����2^_�ZN -`<3 #F30�.�R���> �+0����+V ����R3����Ba[�<�0� +� -��� -+,3�������> �+0����+j3��! >a[����(�(.�~aF��+0�����.+<�v5 ���6� M����( 30� "+E��������c �����3������<30��` ���C�<�� M3�������#����*��3j`����6�.:;3� �3��������+,�7u*�C����+0��a[���j1va[���Z�������B���6�i���03� -��3��� #�3����B���*��3,��+ pC��:���(d3��Dpi�" ��Z ��������>u;���d �30�����6+0:;p.rG�<`<33��D����:��.(���h �<�E������+ #.�7u;`<�<��3VNL���c3����Xe �� ����)g `> -+0� &V���<��� ��3�+c ��0��:.���<��3c��+c �i�<��NL��`<3X�C�'&,�<�>�^_�z������(���`> M3���+ #2+ �*:. ��0���_������3�+D`> -� -~&c >�*+ pC�d�������'a[��( p�� �0�<�C�> �30��(4+ ��: M�������= ��.( ���> ����

�� -���������<��3c��N 3��7����+��� ;���%�7u; -�6�.�� #F+ �*:. ��������

y

�3 + � x < x

�F�����(�+y2(3 + � x) < x2 � �g:;3DpC�d`> ����<NL:. #g+ ��: M������� ��+ -� � �*:���a- -��<�.`<�30�� -��+0NL����� ������ ��N

pC��3�� +0��(���+D�. >a[� �����������.�<�[ �3���a[� � ^_�z��:��D`> �+0� #g&,��d �� +0:;���C��+0�d3��. �3x��+ �.���������[ �30��a[�

pC��`� -:�+0� &,� `����6�.:;3�� �'a[�<� 30�.� ���> ��+ -��( ��� 30�.� ���N�3�. -��( +E��(�� � x ����C�> ��0+ �+ +0:;p �

�7u*�.�0��+0+0�����y� $X�M&,�<a[�7� #y�d ���pC�!�����[ �30��a[� &%����`���&,��:��(Z+0`<�0�<&Y:;� ��:;�X30�� -��+0NL�����d M3������y�jAR�

3����!��30�.�7�V�. -��(�#.��Ny��+c�����[ �3��~a[�"3����"&%������B�.�0��(���`> �3��"��+c`��<�03� ������� ��= : � � b,���<����NL���0� # &,�"���<3

y < 0 ∨ y2(3 + � x) < x2 -+X -�Z� �*:���a- -�����3XNL���0� :�L �30�����d��N�3����"���0�������. - ������(���`� �3����{�3����v3����<�0� ��+ ����� + ��: M�����_�0�*��3 �.�0��+0����3 # +0�Z��<3!:�+"��+0��L �30�D�~3"p�� ���� ��0�� -���������d3��

y2 � x <

x2 − 3y2 � { ��: M������� ����`��B�������%�*�����(�+ xy4 < (x2 − 3y2)2 � SV�[ -����&,�B�. �a[�V3�� `�����+0��(��<�,+0������+ �b,�.�"���N�3X�. -��(Z+0��(��

y2 � x��+c`��<�03� -������d�������.�<�[ �3���a[�z�������`�� #�3����!������d������p.����\�d ���pC� 3��. �3

x2 < 3y2 �g^_��30�.��+c`� -+0�"30�.�R������(���`> M3��"��+X`��7�03� -������ KL,5*P��� �jbc��:.+ #�&,� ��p�3� -���

y < 0 ∨ x2 � 3y2 ∧ xy4 < (x2 − 3y2)2

-+X -�Z� ��:���a� ������3cNL�����D:�L �3��������N 3����"�����������. - ������(���`> M3�������.�<�����6�.���������3������%3�����+ ������(���`> �30�X����5XW W�#�`����������D+0:;p �_�7uF�����<+0+0������+ +0����:��(DpC�%`���� �

�.:;3���(Z����`�� ������[�

int ys = y * y;

int d = x * x - 3 * ys;

bool pred = y < 0 || d >= 0 && x * ys * ys < d * d;

Page 64: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P�? ������� ����� ���� �9��� �3� � � ���

Warning.AR��`��= -�[ -����� �=�=(��

not+0:�������+E33��. �3d�[��: p.�����(���4���<���Ma[� -�B(���a*��+0������+d -��(

+ ��: M�����_�0�*��3�+VN��0��� �[��:��%�.�0������ -��+��,� � �� M3����<�V&c -��3V�[��: 3��think

# &V�������<a[�<�B�[��: :�+0� (���a*���+0������+R���"+ �*:. ������_������3�+ #y&V���<3����<� �[��:=���> ����Z&c -��3R3�� �C�7��NL�����l3�����+0�D���C�<�� �30������+ ���R&%�.�73����<���3c�d ���pC�R�.�0��NL�<�� �p.��R3��D���<�.L -`��R3������ �2^_�Z`> �+0� �[��: `<���.`<�:�(.�R3��. �3,�[��:Z����(�����( &c -��3,3�� ���<3����( ��N +E:.`�� ��Z���C�<�� M3�������#��[��:Z+E�.��:��(���M&)�. �a[�R3����R30�*���+c �3,�[��:;�c(.��+E�C��+� -i30�D�C�7��NL�����O3��������`���+E+� ��0�30�� -��+0NL���0�d �3�������+��

2.3.5 Details

Naming.b,��� �XA � NL:���`<3������ ��+ ��+0� N���� ��:�����3�~� `> -���<( ,.#0���/pw,5* �># ��� -��( (�������3���( p*�

=

�b,�.� XS %Q�NL:���`<3������ ��+! -�+0�/*���M&%� -+ ,5*T�<�>= #�,5�<��B �>#I�",5* ��� �0�;���i�>=?�>��=>!.Zw� �6bc���DL �303��7��. -��� ��+ -N�3��7� 3����6SV���<����`> -� �d �30�.�<�d �3���`��� -� $%���;�0� �=� {*���<hi�<� e0�>#�#�8 � �>q�P�?5gB&%�.� �.�0�Ma[��(3��. �3X -�y��3����<�X�������`� -i���C�<�� �3�������+,`> -��pi�"�7u*������+0+0�<( ��� 3��<�0��+c��N XS %Q!�

Bitwise operators.�=�=�. �a[� +0�<���U���U{*�<`<3������ �*� �*�9q 3��. �3����30�����<��+`> -� pi� ���7�.�0��+0����3���(U���

p.���. ��0� NL�����d �3 #23��. �3 ��+ #g -+6 +0� ��:�����`��Z��N%p.��3�+D�> -`�� ��N%&%����`��4��+D����3����<�0���

1� �g������> -�

NL:���`<3�������+ `> -� �. �3�:;�� ����ZpC�D�7u*3�����(���( 3�������3������� -v3s���C��+ p*� ����.��F������3������lp.��3k&V��+0� 3��3����p.���. ��0�����7�.�0��+0����3� �3�������+��

Definition 3r !$#0��� B �>=], # !$#I# �"@�,5���[p�� �[#0�<�"@c�>=

b,.#�B ��1b!U�/#0�<� @c�>=)�

x =∑b

i=0 ai2i ,.#�B

y =∑b

i=0 bi2iA0KL!$= 13���J� �

ai, bi � {0, 1}K�!$=�,5*/*

0 � i � bW

� !$=Y,Y:4#�,.= D �s!!.* �h,.#YK�:N# � ���J!$#f : {0, 1}→ {0, 1}

�V�;�bitwise operator ϕf

��!$= =>�>�"(I!$#�B5H�/#;@6�<!

f�/� B � { # �hB ,5�

ϕf(x) =∑b

i=0 f(ai)2iW

� !$= ,QS>�/#�,.= D �s!!.* �h,.#UKh:4# � ���"!$#g : {0, 1}2 → {0, 1}

�V�;�bitwise operator ϕg

�h!$= =>� H�"(I!$#�B.�[#;@?�<!

g���FB � { # �hB2,5�

ϕg(x, y) =∑b

i=0 g(ai, bi)2iW

;���"����:�+E30�� M3�������#�+0:;�.�i��+0� 3��. �3B&,� �. �a[� �� :���+0��������( ����3������� - 3s���C� &V�~3�� 6?��_p.��3V���7�.�0���+0����3� �3������n�db,�. �3 ��+ #

0000���<������+0�<��3�+

0#0001

�0�<������+0����3�+1#v -��( +0� ����# :�� 3��

1111&%�.��` �

���<�����<+0����30+15�

bc�����Z�[��:�`> -�Z`�����`�/ 30� M3ϕ ��� (4, 13) = 13

#ϕ ������� (13, 9) = 6

#� -��(ϕ ���� (2) = 13

�{*�<a[�<�� �!p.��3k&V��+0� ���C�7�� �3�����+� ���� (.�7T ����(UNL����3����=����3������� -B3k�*�i��+Z���)5cW W �Hb,�.�7��� ��+

p.��3k&V��+E�"S XQ&# Dp.��3k&V��+0� A �

|#C -��( p.��3k&%��+0� �%A �

^# -+%&,��� -+B Dp �~3s&%��+0�� VA b

~3��. �3

��+":.+E: ���� ����NL�7�0����( 3�� -+ ��!$89(+* �>8��>#0� �SV+"3���� �����3������<30��` ���C�<�� M3�����+ #n3���� p.���. ��0� p.��3k&V��+0����C�<�� �3�����+ e_� u;`��<��3jNL���

~gv�. �a[�X R`<���0����+E�i���.(������ -+0+E������������3v���i�<�� �3������vbc��� ������`��<(.�<�.`<��+g ��.(

-+0+E�*`��L M3���aF�~3s�6��N 3�����+0�"���C�<�� M3�����+c ����"���+E3��<(�����b �p.�� 8F� X��3�� 30� M3 3�����NL:��.`73������. -���3k� ��N 3�����+0�d���C�7�� �3�����+"��+ ���6�.������<��3� �30����� (.�7T ����(�#v+0���.`<� 3����

p.��3k&V��+E� �0�<������+0����3� �3������.+"��N ����3������� -v3k�*�i� a- -�:���+ M��� ����3"+E�C��`��~T �<(=p*� 3����65cW"WO+E3� ��.(. ��0(n�� � �. �a[�=������w(���+0`�:�+0+E��( 3���� ����+E3dN���� ��:.�<��3 e_ -��( ����+E3���/[�<�� g +0:�`�� ���7�.�0��+0����3� �3�������+���{*��`<30����� �*� �*�@qF�ixj��: +0����:��( 3����<�0��NL����� !$#0*dD :�+0� 30�.�<+0� ���i�<�� �3����0+ &%�.�<�=�[��: Z�# !$1 3���� �0�<� �����+E����3� M3������y�c1 a[��� 3�������# �7uF������+E+0������+V����a[���aF�����D3����!p.��3k&V��+0� ���C�<�� �3�����+% ���� ���6�.��<������3� M3������(��<T.����(y�bc����+B��+V����+E3B��p�aF����:�+%&%��3�� 3���� p.��3k&V��+0�"`����6�.���������3 � �<a[��� ��Nv&,� -+0+0:����!30�.� +G3� -��(. ���(

p.���. ��0� ���7�.�0��+0����3� �3������ ��NR{*��`<30����� �*� �*�9q # 3����a- -�:����NX3�����7uF������+E+0�����~0(��<�C�<�.(�+D���z3����

Page 65: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � P[I

Description Operator Arity Prec. Assoc.p.��3k&V��+0�B`����6�.���������3

~� �>P ��������3

p.��3k&V��+0�R -��(&

� q ���N�3p.��3k&V��+0�%u;���

^� # ���N�3

p.��3k&V��+0�B���|

� o ���N�3 -��( �+0+0������������3

&=� ? ��������3

uF���V -+E+0������������3^=

� ? ��������3���% -+0+0�����.���<��3

|=� ? ��������3

Table 3:a =������'B �># ���R,.#�B�,5�>��!�>� ,5���/p�/��DM! K S ����1����L�Y!>(I��=�,5�<!$=)�LW

�*:�� pC�<�b��Ngp.��3�+R���=3���� ���<������+E����3� M3������y� b,����+Ba� ��:�� 3����<���<NL����� `��. -������+R&V�����=�[��: +E&%��3�`��

N������ 32�_p.��3c�d -`��������V3��6

64�_p.��3c�d -`����������

2.3.6 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6/F���'& 3����!p -+0��` 30�<���������������� ��0��:.��( �g�*����> -� NL:��.`73�������+B -��( :.��(��<��+G3� -��( 3���� `�����`��<��3��N `����6�.��<3��<�.�<+0+>z

�$g6/F���'& 3���� 3k���C�bool

#y��3�+Va- -�:�� �� -����� #n -��( 3����D`<����a[�<��+E������+! -��( ���C�<�� �30������+V����a[��~aF�����bool

z8.g�:��.(��<�0+E3� -��( 3���� �<a- -�:. �3������Z��Nv�7uF�����<+0+0������+B����a[���aF����� �������`> -n -��( ����� �3������. -y���C�<�� �3�����+ #����� ��03���`�:�L �� 3���� `�����`��<��3%��N�+0�����03%`<����`�:���3,�<a- -�:. �30�����0z

?5g6/F���'& 3����c3��<���t�.�0��(���`> �3��X -��(6pC�% >&c M���X3��. �3g �0��NL�����D:.� �3������D��Ny "����a[�<�6�.�0��(���`> �3��c����3�� �d �3������d �3���`> -��� � �*:���a- -�����3 ������(���`> M3��B`> -��. >a[� `<�0��3���`> � ���6� -`<3j���dpC��3��`����0����`73�����+0+ -��(��C�<��NL���0�d -��`��R��Nv ���������� -� �

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)g������'a[�!���X(���+E�����'a[� p -+E��`R+E3� �3��<������3�+c �pi��:�3 �g�*����> -�NL:.��`<30������+>zek} �$g������'a[�"&%���<3����<�c���%����3% D���~a[���Z+0�<3X��N�p.���. ��0�$�g������> -� NL:��.`73�������+,��+X`<���6� ��<3��zek} 8.gd�7a� -�: M3��c ����a[�<�6�7uF�����<+0+0�����6����a[���a*�����" M����3������<3���` #-�������`> - #� ��.( ����L �30�����. -F���C�<�� �3�����+>zek}R?5g��0�> -(w -��( :���(.�7��+E3� -��(w ����a[��� +0���6�.������������� �� e_+0�<��pC����'&bg�#g����a[���aF����� ��p rs��`73�+6��N

��0��3������<3���`X3s���C�9e_����`��:�(������bool

g -��( ��0��3������<3���`�#��������`> - #* -��( ����� �3������. -i���i�<�� �3����0+>zek}"I$g��0��NL�����D:.� �3��j X����a[��� �����<(.��`> �3��j:.+E�����V(��"�������[ -�0y@+ L �&V+ ����3��% X�d �30�.�<�d �3���`> ����X� �*:���a �

-�����3,������(���`> M3��zek} P.g��0��NL�����D:.� �3��V ���~a[��������<(.��`> �3��%30� M3 ����a[��~a[��+ (���aF��+E������+g���,+ ��: M�����_�0�*��3�+ ����3�� �d �3�� �

���d M3���`> -��� � �*:���a- -�����3X������(���`� �3��B&V��30�.��:;3,(���a*��+0������+,���%+ �*:. ������ ���*��30+��

Page 66: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P�P ������� ����� ���� �9��� �3� � � ���

b,�.�D3��<��� ���/89(+* �f(0=>!�@=�,.8 ���<NL�<��+ 3��� ���������� -�l3��. �3"`�����+0��+E30+!��N �d -���=NL:���`<3������=&V����`������30:��0�Z`�����+0��+E30+%��Nv +0� ��:.�<�.`<� ��N (���`�L M�� �3������� -��(Z�7u*�.�0��+0+0����� +G3� �3������<��3�+�� % �30:��� -��� #F������3���� NL:.��(. -������3� -i3k�*�i��+% ��.(����C�<�� �30������+c(���+E`�:�+0+0��(Z����3���� �����<`���(������ +0�<`<3�������+X ���� :.+E��(y�

2.3.7 Exercises

Exercise 14� !$=

n � � A3�;!$1 8G,.#IDMB.� �i�>=>��#0� �s!!.* �h,.#RK�:N# � ���J!$#0�f : � n → � �'&.���>��� ek}D�)g

Exercise 15a =�!$p��6!$=�B.���"(0=>!$pw� �V�4,5� KL!$=Y,5*[*

x, y, z � � ek}D�)g $g

(x � y) � z = x � (y � z)� e_�_�@�-��# �XA �U��+X -+0+E�*`��L M3���a[�)g

p4g(x ∧ y) ∨ z = (x ∨ z) ∧ (y ∨ z)

� e �_�@����#(S XQ

,A �

)��+X(���+E3E����p.:;3���a[�)g

` g(x ∨ y) ∧ z = (x ∧ z) ∨ (y ∧ z)

� e �_�@����#(A �

,S XQ

)��+X(���+E3E����p.:;3���a[�)g

(Ng(x ↑ y) ↑ z = x ↑ (y ↑ z)

� e_� �@����# XS %Qx��+c -+0+0��`��L �30��a[�)g

Exercise 16� !$=

x1, . . . , xn

An � � A @$�[p��2,Mp���=S�,5*kB �>���>= �T(+���"!$# ! K

x1 � x2 � . . . � xn

�/#�<�>= 86�Y! Kf�V�;�

xi

A1 � i � n

W ek}D�)g

Exercise 17�0�;!$1 �V�4,5�6�V�;�YK�!.*[* !$1��/#;@E���>�V� ! K Kh:4# � ���"!$#0�C,.=>� ��!$89(+* �>�<�?K�!$= �V�;� �L� �2! K

S �[#�,.= D �s!!.* �',.#RK�:N# � ���J!$#0�LW ek} �$g $g

{S %Q

, VARb

}

p4g{A �

, VA b

}

` g{ XS %Q

}

(Ng{ VA �

}#F&%���<��� %A �

:= %A b��cA �"�

x2��: �d �� :.+E�j3����gN �`<3�3��. �3{S %Q

,A �

, VARb

}��+� c`����6�.��<3�� +0�<3���N*p.���. ��0� �g�*����> -� NL:���`<3�������+��

Exercise 18�I:q(c(I!.�L�

aAbA?,.#�B

c,.=>� ,5*[*bpq,.= �",cS)* � � ! K���D (;�

intW �m�[#�BCpw,5*d: � �9K�!$=

aA

bA ,.#�B

cK�!$= 13���J�>�E�V�;�M�'& (0=>� �>���"!$#0�

a < b < c,.#�B

a < b && b < cD5�J�>* BCB.� �i��=>�>#0�

=>� �h:;*P�V�LW ek} 8.g

Exercise 19a ,.=��>#0�V�;� �����q�i�V�;�mKL!.*/* !$1��/#;@Y�'&)(0=>� �����J!$#0�f, ����!$=hB.�/#;@��<!?!>(I��=�,5�<!$= (0=>�h���hB ��# ��� �

,.#�B2,5����!�>� ,5���/p�/���J� �LW ek} 8.g $g

x < y - 5 || y == 2 || x <= y && x > z

p4gx != 3 < 2 || y && -3 <= 4 - 2 * 3

` gz > 1 && ! x != 2 - 2 == 1 && y

(Ng3 * z > z || 1 / x != 0 && 3 + 4 >= 7

Page 67: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q�� � � � �_� � P[o

Exercise 20^ pq,5*P:+,5�<� �V�;� �'&)(0=>� �����J!$#0� @$�/pw�>#?�/# ^ & �>=>�>�/��� ���s�>�<�J(+H'S>DwH"�>�<�J(0A�,5����:48Y�/#;@ �V�4,5�

xAyAb,.#�B

z,.=>��,5*/*m! K9��D)(I�

int1����V�

x==0Ay==1

A ,.#�Bz==2

W ek} 8.g

Exercise 21\ �4,5�9�',.#QD`!$:C�L,.D ,cS>!$:4� �V�;�G!$:;� (0:4�9! K �V�;�bKL!.*/* !$13�[#;@ (0=>!�@$=�,.8 � r �4,.=�, � H

�<�>= ���q� �/�kB �J(I��#�B.�/#;@ !$# �V�;� �[#�(0:;�k,.#�B2�'&)(+*-,.�/# DN!$:N= =>�',5��!$#I�/#;@�W ek}R?5g�

#include <iostream >�

int main()�

{�

int a;�

std::cin >> a;�

std::cout << (a++ < 3) << ".\n";�

bool b = a * 3 > a + 4 && !(a >= 5);

std::cout << (!b || ++a > 4) << ".\n";

return 0;���

}

Fast Exercise 1�m�/#�B]�V�;� * !�@$�"�h,5*_(;,.=>�>#0�V�;� �L� �?�/#7*d�/# � ����,.#�B � � ! K?�V�;�sKL!.*/* !$1��/#;@?(0=>!.H

@$=�,.8GW \ �4,5�s�h,.#�D`!$: �L,.D ,cS�!$:;���V�;�Y!$:;� (0:;� ! K �V�;��K�!.*/* !$1��/#;@X(0=>!�@$=�,.8 � r �4,.=�, � �<�>= ���q����bB �J(I�>#�B.�[#;@ !$#��V�;�9�/#�(0:4�k,.#�B2�'&)(+*-,.�/#UD`!$:4=X=>�h,5��!$#I�[#;@�W ek}R?5g�

#include <iostream >�

�int main ()

�{

�unsigned int a;

�std::cin >> a;

unsigned int b = a;

b /= 2 + b / 2;

���std::cout << b << "\n";

� �

���bool c = a < 1 || b != 0 && 2 * a / (a - 1) > 2;

���std::cout << c << "\n";

���

���return 0;

���}

Exercise 22 � �[p�� � � :4�[pw,5* �>#0� K�!$= 8Y:;*-,5���J!$#0�iK�!$=��V�;�Y(0=��hB.�J�',5�<� �XKh=>!$8 ^ & �>=>�>�/�������U��: � ��V�4,5� �V�;�9=>� ��:4*T���[#;@ (0=>�'B.�J�',5�<�6B !� �9# !.� ��!$#0�J,.�[#C�V�;�Y!>(;�>=�,5�<!$=

&&W ek}"I$g

Exercise 23� !$=M�V�;� KL!.*/* !$13�[#;@2(0=>�'B.�J�',5�<� � B �>= �[p�� � � :4�[pw,5* ��#0� =���K�!$= 8Y:;*-,5���J!$#0� �/# 13���J�>�

# !YB.�[p���h�J!$# !$= � � :+,.=>� H"=�!!.� !����:4=)�LW \ = ���<� rkt9t ��!�B � �<!?��!$89(0:;�<� D`!$:4= { #�,5*w(0=>�hB.�"�h,5�<�pw,5*d: � ,5� ,6pw,.= �",cS * �

pred! Kf��D)(I�

boolW ek}"P.g

$gx/(y − z) < z ∨ x = 1 + � z

Page 68: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

P�# ������� ����� ���� �9��� �3� � � ���

p4gx/

�� y − 2 > z ∧ y < 3x/(y + 1)

Page 69: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� P�q

2.4 Control Statements������� ���h� ���J!$# �/#0��=�!�B.: �h� � KL!$:4=R��!$# �h�J(+�V�6�<!]��!$#0��=�!.*3�V�;� �'& ���>:4���J!$# ! KY,Y(0=>!.H@$=h,.8 � +0�����`73������ A ��3��<�� M3������ A p.��*`�/*+ A9,.#�B rs:��6� + WC�m�;� �L�G�h!$# ���J(+�V���>#�,cS)* �6:;��<! B �>p��",5�<� Kh=>!$8 �V�;�YB ��KL,.:4*T� *d�/# �',.= ��!$#0��=>!.* � !$1 13���J� � �'&`����:;�<� � �>�J,5�<��82�>#0�S D �>�J,5�<�>82��#0� K�=>!$8 �<!>( �<! S�!.�V�<!$8�W ��!$: 1��/*/*s* �h,.= # �;!$1 �V�;� ���C��!$# �h�J(+�V�,.=>�Y�/89(+* �>8��>#0�<�hB �[# rbtXt AX,.#�B �;!$1%�<! , (c(+*PD �V�;��8 �<!U��=>�h,5�<�?�[#0�<�>=>� �����/#;@(0=>!h@$=�,.8?� W

bc���B���������� -��+ &,�R�. �a[�R+0�����Z+E� N ��,&,�<�0�! -� �����<303k�d+0���6�.��-�vbc���<�d`<���.+E��+E3c��N� +0� �*:�����`����Ng+G3� �3������<��3�+B3��. �3" ����D�7uF��`�:;3���( ����� p*� �����DN��0����3���� T���+E3 3��30�.�DL -+G3>�D{*:�` � 6���������� ����+B+� ���( 30��. �a[� *P�[# �h,.=2�h!$#0��=>!.* � !$1 � bc����+V3k���C� ��Nj`�����30�����!.�'& ��+ �*:���30� ����+E30�0��`<3���a[��#y -+�> -`�� +E3� M3���������3X���Z3����!+0��:;��`��!`��*(��!��+%�7uF��`�:;3���( �3X����+E3X���.`<� (�:��0����� 3����!� u;��`�:;3������ ��N�3�������������� -� ��{*:;���C��+0� �[��: &c -��3!3�� ���6�.���������3 -� -��������~3�����3��. �3!`�����+0��+E30+ ��N"�>] #@]�]�]�+E3��7� +<�b,�.�<� �[��: &,��:.�(!�. �a[�g3��X&X����3��j �.�0������ -�)&V��3��! �3 ��> -+E3g�>] #9]�]�]c�������+n��NF`���(.�-� ABp�aF����:�+0~� 30�.��+��+B:���(���+0���� Mp ����!b,���<����NL���0� #y��� ���0(.�7� 30� ���6�.��<������3c����� �_30���~aF�L -� -��������~3�����+ # �����0� �C�M&,�7��NL:�����`��. -����+0��+g30� `�����30����C3���� !.�'&)��N �.�0������ -�H ����"�.�<��(���(y�

2.4.1 Selection: if– and if-else-statementsAB�.� � ��E3���`�:�L ��0��d+0���6�.��R&c ���3���(��<a*�L �3�� N��0��� ������> ��X`�����30���� !.�'&Y��+X3���+0����<`<3 &V���<30�.�7�B�������3R D� ��E3���`�:�L ��X+E3� M3���������3V��+V� u;��`�:;3��<(n�%^_� 5XW W�3�����+%`> -� pC� (������!aF�� -�

ifHJ�>�J,5�<��82�>#0� �

b,�.� +E�*��3� Mu���+

ife�� ����� ��� ����� g

����� � � � ���

&V���<�0��� ����� ��� ����� ��+ -�w�7uF�����<+0+0���������6a- ����L �p.�� (���`�L ��� �3������4��NR 3s���C�Z&V����+0� a� -�:.�<+6`> -�pC� `�����a[�<�03��<(�3��

bool#X ��.( ������ � � � ��� v �+ 3���� �. -����+0:�������+G3�+Xv ��+� =+E3� �3���������3>� � �

b,�.� +0���d -��3���`�+ ��+"30�.� NL�����'&V����� ��� ����� ��� ����� ��+"�<a- -�:. �3���(0zv��N -��( ���.~�=��Ng��3�+"a- -�:��6��+ ��= : � #����� � � � ��� ��+ �7uF��`�:;3���(� �N�3��<�0&c ��0(.+<� ^_� ��3����<�2&,����(�+ #� -�

if�_+E3� �3��<������32+E�.���30+ 3����c`<����30���� !.�'&

����3��3k&,�p.�� -��` ����+<� b,���Da- -�:��D��N�� ����� ��� ����� +0�����`<3�+R&V����`��=��Nj3�����+0� p.�� -��` ����+"��+ �7u;��`<:�30��(y� ;���%� u� -�6�.�� #�3����"NL�����M&%�����D�������+,��N�`���(.�

int a;

std::cin >> a;

if (a % 2 == 0) std::cout << "even";

���> �(z Z��:.� pC�<� N������ +E3� -��(. ���( ���;�.:;3 ����30�Z3����6a� ��0�L �p.��a -��( &%����30� �

even� 3�� +E3� ��.(. ��0(

��:;30�.:;3X��N -��(Z������d��Na��+c�<a[���y�

AB��3������ ���� #C -�if�_+E3� �30��������3R`� -�=pC�D`����6�.���������3���( p*� -�

elseH S =�,.# � � � bc���D+E�F��3� Mu

��+� ��� ��6�=��� A&�( �6��� � �����D�� � � ����� ���)�('��( �63��� ��������������! "��# �����)�='#'�����6?������?����� ���)�('��( ��� � �6��4�(3�������B��6���� � �6G

Page 70: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

o�] ������� ����� ���� �9��� �3� � � ���

ife�� ����� ��� ����� g

����� � � � ��� �else

����� � � � ��� �

-��( 3���� +0���d ���3���`<+V��+B -+%NL�����'&V+ � � ��� � ��������� ��+V�<a- -�:. �30��(0z ��Nv��30+%a� ��:�� ��+ ��= : � # ����� � � � ��� ���+V� u;��`�:;3��<(= -N�30�<�0&c ���(�+>z ��3����<�0&%��+0� # ����� � � � ��� �Z��+%�7u;��`<:�30��(= �N�3��<�0&c ��0(.+<� ;���R�7u; -�6�.�� #;3����NL�����'&V���.� �������+X��N `��*(��

int a;

std::cin >> a;

if (a % 2 == 0)

std::cout << "even";

else

std::cout << "odd";���> �(4 �*:�� pC�<� N������ +E3� ��.(. ��0(z���;�.:;3 ����3�� 3�����a- ����L �p.��

a� b,�����z��N

a��+ �<a[����# �

even� ��+

&%�0��303����3��D+E3� -��(. ���(Z��:;30�.:;3 z;��3����<�E&V��+0��#��odd

� ��+,&%����3E3���� 30� +E3� -��( M��(Z��:;30�.:;3>����.�<�=NL�����d �3E3������6 -�

if� +E3� �3���������3 # �~3B��+B`�����������30������+0�<�03 6����.� p����> �/Zpi��NL����� ����� �

� � ��� ��#ipC��NL�����else

#� -��( pC��NL����� ����� � � � ��� �*� �������<�Ma[�<� # ������ � � � ��� �� -��( ����� � � � ��� �= ��������(�����30��(w -��(

else��+ -���������( &V��3��

if#, -+ +0���M&%� ���43������7u; -�6�.�� �pC�'a[��� ^_NV30�.�&V������

+E3� M3���������3cT�3�+c��� +0��������R����.�B3���������3c`> -� -�+E�DpC�R3k�*�C�<+0�<3B �+% +0��������R��������5,������`<3��~a[���� #

if� -��(

if-else� +G3� �3������<��3�+c ���� /F���'&V�Z �+ ��� * ���>���J!$#��>�J,5�<��82�>#0�V� �

2.4.2 Iteration: for-statementsSO�D:.`�� ������� �i�M&,�<�0NL:.j&c >� ��NX�d -�����.:�L �30�����d30�.��`<����30���� ! �'& ��+ �.�0�Ma*��(���( p�� ���<��=�,5���J!$#�>�J,5�<�>8��>#0�V� � ^ 30�<�� �3������ -���M&%+d30�4�7u;�<`�:;3�� +E3� �3��<������3 �d -��� 30������+ #%�i��+0+0��p.��w&V�~3��(���hi�7������3,� ��� ����<3��<��+ �� -`���3�������� ^ 3��<�� �30����� +G3� �3������<��3�+, ��0�! -�+0� `> -���<( * !!>(+� #� -+ 3����<� �E������3��;����:���� � +E3� �30��������3 e �C��3�����3��L -��� gv+0�<a[�<�� -C3�������+��v{*�����`<30������ ��.(��3��7�� �3�������+G3� �3������<��3�+ M���`�������`<3���a[�<��6����NL�7�0����( 3�� -+ �h!$#0��=>!.*��>�J,5�<�>82��#0�V� �5,����+0��(.�7��3����=������p.���� ��N `����6�.:;3������ 3���� +0:��

Sn =∑n

i=1 i��N 30�.� T���+E3

n�. �3�:;�� �

�*:�� pC�<��+ # NL���d =����a[���n � � � Kv�������� -� P=���> -(�+6���w a� M���L �p.��

nN������ +E3� -��( M��(w���;� :;3 #

(��<T.����+% ��.��30�.�7�ca- ����� �p.��s3�� `�����3� -���d3���� ���<+0:��3 #;`����6�.:;3���+ 3����R����+0:��3X -��(T �. -������:;30�.:;3�+

��3>� ^_�6����(��<�23��!:���(��<��+E3� ��.(D&V���D30�.�,���������� -�sum_n.C

����(.�<��( pC���. �a[��+j -+2`�L -�����<( #�&,�%�. �a[�3�� �7uF�.L -���3���� (���hi�<�0����3c� ��03�+c��Nv

forH"�>�J,5�<�>8��>#0� �

�// Program: sum_n.C

�// Compute the sum of the first n natural numbers.

�#include <iostream >

�int main()

�{

Page 71: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� oF�

// input

std::cout << "Compute the sum 1+...+n for n =? ";

���unsigned int n;

� �std::cin >> n;

���

���// computation of sum_{i=1}^n i

���unsigned int s = 0;

���for ( unsigned int i = 1; i <= n; ++i) s += i;

���

� �// output

��std::cout << "1+...+" << n << " = " << s << ".\n";

��return 0;

� �}

Program 6:(0=>!�@.� �+��:48 #�W r

for-statement.b,���

for�_+E3� �3��<������3R��+R 6a[�<�E� `����6� -`<3RNL����� ��Nj -�=�~3��<�� �30����� +E3� �30��������3 #C -+

��3c`���� p.������+ 3��;����� +E3� �3��<������3�+,���X�7uF�����<+0+0������+%����3��D�������g^ 30+X+E�*��3� 'uZ��+,(��<T.����(�p��

fore � � ��� � ����� � � � ��� � ����� ��� � ��� z����� � ��������� g

����� � � � ���

&V���<�0� � � ����

����� � � � ��� ��+6 �� �7uF������+E+0����� +E3� M3���������3 # (���`<L ��� �30�����z+E3� �3���������3 #g��� 3����Z�*:��+E3� M3���������3 #*+0�<�!{*�<`<3������ �*�������>8F� ^_�� -� ��Ny3�����+0�B`> -+E��+ # � � ���

����� � � � ��� �<�.(�+ &V�~3�� +0������`�������+0:�`�� 3��. �3g3����<��� ����R -~&c >�*+ 3k&,�D+E������`���L ����pC�<3k&,�����3����V� �������3�����+0��+c -N�3��7�%

for� �%+0:. -�~�

� � ����

����� � � � ��� (��<T.����+2 -��( ������30�L -�� � ��+� Va- ����L Mp �� 3��. �3 ��+ :�+0��( 30�"`�����30����� -��( �<a[����30: ���� ����(3����2��3��<�� M3������!+G3� �3������<��3 y +n� u;��`�:;3������n��^_�

sum_n.C# � � ���

������ � � � ��� ��+� ,(���`�L ��� �3������ +E3� �30��������33��. �3c(��<T.����+X3����Ra� M���L �p.��

i�

SV+c���� ��if� +E3� M3���������3 # � ����� ��� ����� ��+c -� �7uF������+E+0�����Z���,a- ����L �p.��B(���`<L ��� �30�����&%����+0�B3s���C�

`> -� pC� `�����a[�<�03���( 3��bool

� ^ 3R(��<T.����+R�.�'& ������63���� ��30�<�� �3������ ���*��+R����#i�. -������� -+R������d -+� ����� ��� ����� ���73�:;����+ ��= :u� �D^ 3"��+! -���M&,�<( 30� M3 � ��� � ��������� ��+ �<�6�.3k� ��� &V����`�� `> -+0�D��3�+Ba- -�:�� ��+����3��<�0�����<30��(z �+ ��= :u� � SV+ 3������ ����6+0:�������+E3�+ # ��� � � ����� ��� ��+ -� ��0p.��3E�� ��0�=�7uF������+E+0����� 30� M3�d �� -�+0�6pC� ���6��3k�Z��� &V����`�� `> -+E�D�~3B�. -+B����7hi��`<3�� � ��� � � � ��� ��+B -� ��0p.��30�� ��0�Z+G3� �3������<��3>�^ 3X��+c�0��NL�<�0���<(Z3��6 -+,3���� S>!�B.D ��N�30�.�

for� +E3� M3���������3>�

ARN�30��� � ��� � ��������� �. -+ 3����Z�<hi�<`<3d��NB���*(���N��*�����= -�w��p.rs��`<363��. �36 ����C�> ��0+6��� � ����� ��� ����� �{*:�`�� �� �<hi��`73V��+X+� -��(�30� �E�d �/[�R�.�0��������+0+%30�M&c ��0(.+,3��<�0�����. �3������ �;�2bc�. �3X��+ #.��N�3���� � ��� � �����������+ KL,5*P��� -N�30�<� � ��� � ��������� �. -+ pC�����6�7a� -�: M3���(6 VT.����3�� ��:.� pC�<�2��N.3�������+���^_� 3��. �3 +0�<�.+E� #*�<a[�7�0��<a- -�:. �3������ ��N � ��� � ��������� �d �/[��+j R+E3��<�630�M&c ��0(.+ 3����c����(���N 3����

for�_+E3� �3��<������3>� ^_�

sum_n.C#

��� � � ��������� ����`<����������3�+ 3���� a- ����� �p.��i&V����`�����+cpC��:���(���(�N��0��� �pi�Ma[�"��� � ����� ��� � ��� �

� � ����D�.�'&����> -(;� 3��d������`���+E���� (��<T.�.� 3���� +E���d -��30��`�+B��N for

� +E3� M3���������3>� �����+E3 # � � ����

����� � � � ��� ��+D�7u;��`<:�30��( ����`����4b,���<���> �N�3��<� � ��� � ��������� ��+ �<a- -�:. �30��(y�z^_NV�~3 ���73�:;����+ ��= :u� # -����<��=�,5���J!$# ��Nj3���� ������ +E3� ��03�+�� ^_N � ����� ��� ����� ���<30:��0�.+ KL,5*P��� #y3����

for� +G3� �3������<��3 �<�>= 86�[#�,5�<� � #

3��. �3c��+ #���30+,������`���+0+E����� ����(�+%�������<(.�� �3�����[�

Page 72: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

o � ������� ����� ���� �9��� �3� � � ���

1j �` � +0�������� �~3��<�� �30����� ��N for

�_+E3� �30��������3 `�����+0��+E3�+v��N;T���+E3 � u;��`�:;3����.� � ��� � � � ��� -��( 30�.�<��<a- -�:. �3����.� ��� � � ����� ��� � SVN�3��<� �> -`��4��30�<�� �3������ � ����� ��� � ��� ��+D�<a- -�:. �3���(y� ^_NV��3 ���73�:;����+ ��= : � # -����3����<�X��3��<�� �3������ NL�����'&V+��j^_N � ����� ��� ����� ���<30:��0�.+ KL,5*P��� #;3����

for� +G3� �3������<��3,3��<������� M3���+��jbc���

�7uF��`�:;3������ ����(��<�B��+%3����<����NL���0� � � ����

� ��� � � � ��� #�� ����� ��� � ��� # ����� � � � ��� # � ��� � ��������� # � ����� ��� ����� #����� � � � ��� # ��� � � ����� ��� # ���>�0:���3��� � ����� ��� ����� �0�<3�:;����+ K ,5*T�L� �mn�73 y@+c+0��� 3�����+X���Z -`<30�������g5 ����+0��(��<�,3����

for�_+E3� �3��<������3

for ( unsigned int i = 1; i <= n; ++i) s += i;

���sum_n.C

-��( +0:;���C��+0�n == 2

�� �����+E3 #-3���� a� M���L �p.��i��+ (��<T.����(D -��(D���.�~3��L -�� � ��(R3�� 1

�vb,�.�<���3c��+,3���+E30��(�&V���<30�.�7�

i <= n�2SV+

1 <= 2��+ ��= :u� #.30�.�RT���+E3X��3��<�� �3������d+E3� M�03�+��jbc��� +E3� �30��������3

s += i��+ �7u;�<`�:;3���(�# +0�<3030�����

s3��

1#, -��(z3����<���� -N�3��<�

i��+ ���.`7����������3���( p��4�����+0:�` � 3��. �3

i == 2� AB��� ��3��<�� �3������ ��+ ���M&z`����6�.��<3���� SV+v %���7u*3v+E3��7� #�30�.� `<���.(���30�����

i <= n��+ �<a- -�:. �30��(

-�[ -���n�XSV+2 <= 2

��+ ��= : � #y ��.��30�.�7�B��3��<�� �3������ NL�����M&%+�� ��~��+E3s += i

��+V�7uF��`�:;3���(�#C+0�7303������s3��

3�2b,���<���> -N�30�<� #

i��+ ����`<�0��������30��(6p*�������V+E:.`��d3��. �3

i == 3�2b,���B+0��`�����(d��3��<�� �3���������+g�.�'&

`����6�.��<30���2bc���!+E:�p.+0� �*:�����3%�<a- -�:. �3������ ��Ni <= n

����3� -���+3 <= 2

&%�.��` ����+ K ,5*T�L� � b,�*:�+ #����NL:;�03����<�c��3��7�� �3������63� �/[��+ �.L -`��R -��(d3����B�.�0�*`���+E+0����� ��Nn3����

for� +E3� �3���������3,����(�+��gb,���Va� ��:�� ��N

s��+X���'&

3#;3���� +0:�� ��Nn3���� T���+G3

n == 2�. �3�:;�� -y�*:�� pC�<��+<�

Infinite loops.^ 3 ��+ �> -+0��~�Z�C��+0+0�~p �� 30� `<�0�> �3��D��*���.+V3��. �3 (�������3R3��<�0�����. �3���� ���� �7u; -�6�.�� #

����`� -�i3��. �3 pC��30� � ����� ��� � ��� ��.(���� � � ��������� �d ��6pC�R���6��3k�[�����������'a[�<� #;pC��3�� � � ����

����� � � � ��� -��( ������ � � � ��� `> ���pC�R3����"��:.�n+G3� �3������<��3>�2^_��3�����+,`> �+0�"&,� ���<3c3����

for� +E3� �3���������3

for (;;);

SV+,3����"�<�6�.3k� � ����� ��� � ��� �. -+,a� ��:�� ��= :u� #.�7u;��`<:�30�����D3�����+,+E3� �3���������3,��:��.+,3��;����:������~3��<�� �30����� -N�3��7� ��30�<�� �3������ &%��3�����:;3 -`<30: ���� (�������� -���*3��������;� b,���<����NL���0� #

for (;;)�d �� pC��0�> -(4 �+

�ENL�����<a[�7���;� ^_�Z���<�.�7�� - #� +E3� �30��������3,&%�.��` � (��*��+c����3X3��7�������. �3��V��+X`> �����(� -� �/# { #I�/�<� * !!>( �5,��> ����� #����;T.����3��B������.+% ��0�!�7u*30��������~� :���(���+0���� �p.��! ��.( �.�0������ -�����<��+ 30�E���. ���( 3��� �a[����(

3������ � X�<a[�<�E3��������+0+ #-+0�����<30������+i+0:�`�� ������ +y��`�`�:;���7a[��� ���"�0�> -[���NL� +0��N�3k&c ����-�v^_N*�[��:!���<��:.� �����:�+0� Z`����6�.:;3��<� #��[��: �. >a[��������p �p.��=�7uF�C�7��������`���( 3�����+ /*����( ��N,�.����������������� �D ����������� ���E�. -����+ �;�

x2��: �d �� -+G/ �%����� (�����+0�0y 3R3���� `����6�.����7�B+0���6�.�� (��<3���`<3 ���;T.����3�� ��*���.+B -��( &c M����+B��� �pC��:;3v3������ rs:�+E3j -+ ��3 `����6�.L �����+ �pC��:;3v+G�F��3� MuD�<�0�����0+��Z^_��(.�<��(�#[30�.��+ &,��:.�(DpC�, B������ �3v3��������3��"� �a[�% -��( ��32&,��:��( +0��~a[�X�d -��� ������p.�����+v��� +0��N�3k&c ����%(��<a[�<����.������3>� bc���,�.�0��p �������+230� M3���;T.����3��������� +D ��0������36 ��&c ��F+D -+D�> -+E� 3��=+G�C��36 �+ ��� 3����� �pi�Ma[� �7u� -�6�.��-� mn����� +D`> -� pC������<303k� `����6�.���`> M3���(�#F -��(��i��+0+0��p.���3����<� ������Z���;T.����3����� &V�����Z�7uF��`�:;3���( ��� `��<�03� -�������������� ��+E3� M3���+c���.~�[�^_� N �`<3 # 3���� +0��3�:. �30�����4��+������C�����+0+ � ^ 3d`> -� pC� +E�.�'&V� 3��. �3 3�����������p.���� ��NR(��<3���`73������

���;T.����3�����*���.+Re_`������������� ���<NL�<�0����( 3�� -+63���� �4,5*T���[#;@](0=�!�S)* ��8 g6`> -������3�pC� +0��~a[��( p��w `����6�.:;3��<� # -+ &,��� �a[� -��( :.��(��<��+G3� -��( �~3 3��*(. ��[� b,�.�7����NL����� #2+0�����6`� ����d��+ ������(���( &V�����(���+0����������� ��*���.+��6�=�6�. >a[� 3�� `��.�<`�/ �Gp*� � ��.( ��30� M3!3����6��30�<�� �3������=+E3� M3���������3"3��7�������. �3���+NL���% -�C�C��+0+0�~p ��R���������� -�\+E3� �3��<+c3��. �3c`> �� �*`�`�:;�>�

Page 73: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� o�8

Gauss.x2��:w�d �� /*���M& ���d� �a[�Z���� -�� � �<(w30� M3���:;���.�0������ -� sum_n.C

��+6 -`<3�:. -�~�4 p -(�7u; -�6�.����c^ 3B��+%p -( ��� 3���� +E����+0� 3��. �3B��3%(��*��+B����3V`<����aF���.`<���������(���������+E3E�� �3��R3���� �C�'&,�<�B��N`�����30����y+E3� �30��������30+��^_�Z����+,�.�0���d ��0��+E` ������ (. ��F+ #;3����!} �<�0�d -���d �30�.�<�d �3���`��� -�d5, ��� F������(;����`�� } -:�+0+ke��'o�o�o �

�>#[I�I$gj&c -+ 3����(3�� +0:��\:;��3����B��:.� pC�<�0+1, 2, 3, . . . , 100

� b,���R30�> -`����<�%�. -(d�.L -������(d3�� /[���<�����+�+E3�:�(�����3�+6p.:.+G�wNL��� =&V������ # p.:;3 }" -:�+0+�`� -���Z:;� &%��3�� 3���� `����0�0��`<3d����+0:��3

5050a[�<�0�

�*:���`�/*��[� $X� �. -( ���d ���������( &%����30�����(��'&V�=30�.�D�*:�� pC�<��+ ��� ���.`7���> -+0���.�����(��<� #� -��( ����� ������pC����M&)����`��! -�[ -������Z(���`<�0�> -+0����� ����(��<�>�g5,��� ����� #*30�.� 3k&,� ��:.� pC�<�0+X��� �> -`�� `����:����+0:�� :;�3��

101z*�.�<�.`<� #F3����B�Ma[�7�� -�i+E:.�O��+

100 � 101 = 10100#F�. -�NC��Nn&%�.��` �d��+ 30�.�B��:��DpC�7� 3��. �3 &c -+

-+E/[�<( NL���>�� � 8 �>�<� q�# q�q �>]�]

�>]�] q�q q�# �>�<� 8 � ��>];� �>];� �>];� �>�<� �>];� �>];� �>];�^_��3�����+,&c �� #.}" -:�+0+c(���+0`��'a[�<����(Z30�.� NL�����D:�L

n∑

i=1

i = n(n + 1)/2,

NL��� ����n � � ��b,���

for� +E3� �3���������3 ���

sum_n.C`> �� 3����<����NL�����DpC� �0�<�.L -`���( p*� 3���� �D:.`��

�������R����<�[ -��3X -��(Z� � `�������3%+G3� �3������<��3 � �

s = n * (n + 1) / 2;

� �"�.� uF3X���<3X30�6 ���> -n ����.���`> M3������d��N +0�����`<3������� -��(Z��3��7�� �3������d+E3� �3���������3�+��

Prime numbers.^_� 3����B����30���*(�:�`<3����E�{*��`<3������=����� #*&,�R� �a[�B3� -~/[��(Z ���3c MpC��:;3 ���������V��:.� �

pC�<�0+��2$%�M&w&,��:��( R���������� ��|�����/ ���/[�,3��. �323���+E3�+2&V���<3����<�j��� ����3g ���~a[���6�*:�� pC�<�j��+ �.�0�����'�SV`�`<����(������!3�� 3����V:�+0:. - (.�7T ����30������#� "�*:��Dpi�<�

n � �, n � 2

��+g���������X��Ny ��.(d������ ��NC��3g��+ ����3(���aF��+0��p.�� p*�= -��� �*:�� pC�<�

d � {2, . . . , n − 1}��b,�.� +E30�� �30�����=NL���!��:;�!���������� -����+ 3����<����NL�����

`���� �� � �=�0��3��B !��*����3��. �3j��:��.+ 30���0��:.���d �� 3�����+E�B�*:��Dpi�<��+ #* -��(d30��+E3 �> �` ���NC3������ NL��� pi������� !(���a*��+0��� ��N

n�2^_Ny !(���aF��+0��� ��+gNL��:.��(�#*&,�V`� -�d+E3���� -��(d��:�3E� :;3, "N -`<3������ � �3������ ��N n ����3��!3k&,��*:�� pC�<��+ #[�����'aF���.� 3��. �3

n��+j����32����������� AV3����<�0&%��+0� #[&,�c��:�3E� :;323��. �3

n��+ �.�0������� Kv�������� �� o

���6�.������<��3�+ 3�����+X+E30�� M3������ ��� 5XW W #i:�+0����� �����for

� +E3� �3���������3 #. -��( �����if�_+E3� �30��������3�� �X���

�d ��0/- �p.�� #F3����for

�_+E3� �3��<������3X�. -+B -� ���6��3k�dpC�*(;� #.+0����`�� &,�!�. �a[�!�.:�3X3���� (���aF��+0��p.�����3k� 3���+E3����3��Z3���� � ����� ��� ����� �Zb,�������6�C���03� -��3 ��p.+0�<�0a- �3������ ��+ 3��. �3 3���� � ����� ��� �����

n % d != 0(��<T �

����3���~� ���<30:��0�.+ K ,5*T�L� NL���d == n

#;+0� 3��. �3 3����B��������+ ��:. ��� -��3�����(d3�� 3��<�0�����. �3��z���N_e -��(d��������NJg � ����� ��� ����� ���<30:��0�.+ K ,5*T��� �> �������<� #�&,�,�. >a[�,NL��:���(6 B(���aF��+0���v��N

n���D3���� �� -�����

{2, . . . , n−1}�

�// Program: prime.C

�// Test if a given natural number is prime.

� � F�=�������6 �� �������;�D��6�� � � �69����� �# �����&��� @���$&�������( ���!�� � ��@���� C �#��1���� ���)��'.@:��$��������( 9����# ����3<�(�5�='#'n9�����

������@: ���n(n + 1)

���F� $&� G

Page 74: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

o-? ������� ����� ���� �9��� �3� � � ���

�#include <iostream >

�int main ()

�{

// Input

unsigned int n;

���std::cout << "Test if n>1 is prime for n =? ";

� �std::cin >> n;

���

���// Computation: test possible divisors d

���unsigned int d;

���for (d = 2; n % d != 0; ++d);

���

� �// Output

��if (d < n)

��// d is a divisor of n in {2,...,n-1}

� �std::cout << n << " = " << d << " * " << n / d << ".\n";

� �else

� �// no proper divisor found

� �std::cout << n << " is prime.\n";

� �

� �return 0;

� �}

Program 7:(0=>!�@.� �c(0= �/82�LW r

2.4.3 Blocks

^_�w5cW"W ��3D��+ �C��+0+E��p.��63��=���0��:�� +0� �*:�����`�����NX����� ��� �������d+E3� �30��������30+D����3�� ����� +0���.����+E3� M3���������3C3��. �3y��+C3������!`� -����(" ��!$89(I!$:4#�Bs�>�J,5�<�>82��#0� #-��� +0���6�.��% S * !�>Z �)bc����+y����`��. -����+0�(��*��+ ����3!�d ��.�~� :�L M3��"3����D`�����3E�����!.�'&�(�������`<30��[� �g��*`�/F+" -���M& 30� +E3E��:�`<3�:;���6 ����������� -� p��������:;�.����� +E3� M3���������3�+ 3��. �3 �������`> ���� pC������.� 3������<3����<�>� ^_� � ��03���`<:.� �� #g3����<�4 ���� 3��*��,3��(���+0����� �C�M&,�7��NL:� ��.(Z �3X30�.� +� -���B3������V���> -(. �p.��R`�����30����y+E3� �30��������30+��{��F��3� -`<3���`> -��� #M p.��*`�/R��+n+0���6�.��V c+E� �*:�����`��j��N � �<�0�%��� ������� +E3� �3��<������3�+i30� M3� M���j�<�.`<���+0��(

��� `�:;����dp��� -`���+<�

� � ��� � � � ��� � ����� � � � ��� ���~��� ������ � � � ��� ���

12 -`��4��NX3����+E3� �30��������30+D�d �� ��� � ��03���`�:�L �� pC� p.���`�/ #2+0�=��3D��+ �C��+E+0��p.���3�� � �a[� �.�<+E3���(p.��*`�/*+��gb,���"+E���6�.���+E3 p.���`�/d��+c3���� ���6��3k��p ��*`�/

{}�

x2��: �. �a[� �����> -(;� +E�����=p.���`�/*+��"1j -`��=���������� -� `�����3� -����+R 6+E�C��`<�L - p.��*`�/ #i3����D+E��� `> -����(K�:N# � ���J!$# S>!�B.D ��Ni3����

mainNL:���`<3������y� b,�.��+jp.��*`�/D����`����+E��+g3����%+E� �*:�����`��V��NC+G3� �3������<��3�+ 3��. �3

��+c�7u;�<`�:;3���(Z&V����� 3����main

NL:���`<3������ ��+X`� -����(p*�d3����!���i�<�� �3����.� +E�*+E3���� �

Page 75: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� o�I

�%+0����� p.��*`�/F+ #;���.� `> -��`<���> �30�"+0�<���`<3������Z -��(��~3��<�� �30����� +G3� �3������<��3�+ &%�.��+E� pC��(;�d`�����3� �����+ �+0� ��:.�<�.`<� ��N 3s&,���� ������� +E3� M3���������3�+�� ;��� �7u; -�6�.�� #i+0:;���C��+0� 3��. �3RNL��� 3���+E30�����d�.:;�0�C��+E��+&,�R&,��:.�(����/[�B3��D&%���~3��R��:�3% -�i� ��E3��L -C+0:���+,(�:;�������D30�.� `����6�.:;3� �3���������

sum_n.C�

for ( unsigned int i = 1; i <= n; ++i) {

s += i;

std::cerr << i << "-th partial sum is " << s << "\n";

}$%�<�0�X3k&,�!+E3� �3���������3�+2 ����X�7u;��`<:�30��(����6�> �` ���~3��<�� �30����� ��N.3����%������ �� �����+E3 #�3����c���7uF3g+0:����d -��(��+X -(�(���(�3��

s#�30�.�<��3����"`<:��E������3ca- -�:��"��N

s��+,&%����3E3���� 30� +E3� -��( M��(Z�<�0�0���%��:;30�.:;3>�

�g��*`�/*+!+0����:��(=��� �������<�� - pC�DNL�����d �3030��( -+ +0���'&V� �pC�'a[��� bc�. �3"��+ # ���<&%������ ����C�> M��+ -N�3��7� 3����B���C��������� -��(dpC��NL�����V3����B`����+0�����!p��� -`���#� -��( �� ����.�<+ ����pC�<3k&,����� ����B���.(�����3���(d�������<a[�<_� AB���� ��N 3���� p ��*`�/ `�����+0��+G3�+R��Nnrs:�+E3 �����D+E�������� +E3� �30��������3B -��( ��3 ���T�3�+R���=����� ������ #3����Rp ��*`�/`> -��pC� NL�����d �3E3���( -+%����� +0��������R��������bc���B3k�*�C�B��NC3��<+E3c��:�3E� :;3 &,�B�. �a[�R`<���> M3���(���30�.�V�����7aF����:�+ �7u; -�6�.��V��+ `� -����( B �LS :N@@�/#;@

!$:;� (0:4� �YS S :N@ ��+j "`�������������!:�+0��(63��<�0�t3��"(�������3��V B���������� -���������V�7�0����� #��.�<�.`<� �E(��<p.:����������� ����+V3���� ������`���+0+R��NvT.�.(������d -��( ���������� M3������ +0:�` � �<�0�0����+��"^ 3R��+B���*��( ���� �`<3���`��"3���&%����30�(��<p.:�������������:;30�.:;3"3�� +E3� -��(. ���( �7�0����� ��:;30�.:;3"+0����`�� �~3!`> �� 3������ �������D�> -+0��~� pi� +0�<� ��� �3���(N������\3���� �G�0�> - � ���������� -�\��:;30�.:;3X3��. �3c:�+0:. -�~�����*��+c3��D+E3� -��(. ���(Z��:;30�.:;3>�

Visibility.�g��*`�/*+2(��R����32���.~� +E30�0:.`73�:;���c %�.�0������ -� aF��+0:. -���"p :;3 3����<�D -�+0�B�.�0�Ma*��(��, R�������`> -

pC��:���(. ��0�d ��0��:.��((���`�L ��� �3�������+�e_��Nya� M���L �p.���+ #FNL���c�7u� -�6�.�� g7� SV���d(.�<`�L ��� M3�������3��. �3c ����C�> M��+����+0��(�� 6p.��*`�/ ��+B`� -����( * !�h,5* 3��d3��. �3Rp ��*`�/i�"St��*`> -�(.�<`�L ��� M3������ �7uF30����(.+ ������ :���3����3��������( ��N 30�.� p.���`�/Z��� &V����`�� ��3B ����C�> ���+<�VS �. -���"3��. �3V��+V����30���*(�:�`���( p�� ���`> -�(���`<L ��� �30�������+c����3 �Ga*��+0��p.�� � ��:;3�+0��(.�B3����Rp.��*`�/d&V���<��� ��3c��+c(���`�L ��0��(y� ;���X�7u� ��6� �� #F���

{

int i = 2;

std::cout << --i;

}

++i;3���� +E3� M3���������3

++i;(��*��+ # !.� ����NL�<� 3���3���� a- ����L �p.��

i(���`�� �����( ����+0��(�� 3���� p.��*`�/ �"b,�*:�+ #C��N

�[��:Z`�����N�������3%3���� `����6�.����<�g&V��3��3�����+,`��*(�� #���3c��+E+0:���+V +E�F��3� Mu �<�0�0��� #�:.����<+0+����>�SV`<3�:. -��� #�3���� �pC�'a[��`��*(��dN��� -�����<��3 �d ��=pi�`<���0����`<3D��� 3�����`�����3��7uF3D��N,3�����+0:;�0����:���( �

�����Z���������� -� � ��3 ��+ -���'&,��( 3�� (��<T.���63k&,� a- ����� �p.���+!&%��3�� 3�����+� -��� � ������ ;��� ����+E3� -��`�� #��� pC��(�(������ 3����! �pi�Ma[� `��*(��! -+XNL�����M&%+ �F�����(.+c �C�<��NL�<`<3���`����0�0��`<3%���������� -� ��

#include <iostream >�

�int main()

�{

�int i = 5;

�{

�std::cout << ++i; // outputs 6

int i = 2;

Page 76: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

o�P ������� ����� ���� �9��� �3� � � ���

std::cout << --i; // outputs 1

���}

� �std::cout << ++i; // outputs 7

���return 0;

���}

b,�.�i��� ������"o6 -��(Z����.� ���"���<NL�<��+V3�� 30�.�"(���`�L ��� �3������ N������ ������"I # &%���<���> -+c3����

i���Z������!q

����NL�7��+ 3�� 3����(.�<`�L ��� M3������ N������ ������d#F� bc���<�0��NL����� #23�������������� �� ��:�3E� :;3�+ T���+E36#j30�.�<�

1#

-��( T �. -���7� ^_� +0�����6+0�<�.+E� #230�.��(���`<L ��� �30����� ��� �������#Z3����6�C���� ������� ����(���+ 30�.�6�����7aF����:�+

(���`�L M�� �3������ ��NiN������ ������ I*�)b,�.��+ �.�.�<�.�����<�.��� ��+6`> -����( #�,.82� ��� B.�/#;@ � �g:;36&V�����

3����6p.��*`�/ 3��. �3 `�����3� -����+!30�.��+E��`�����( (���`<L ��� �30����� ����(�+ ��� ������ �>] #�30�.��+E��`�����( (���`<L ��� �30������GpC��`<������+,����a*��+0��p.�� � e &,�"+� �� � �E��3,��:���+c��:�3c��N +0`����C� �5g, -��( 30�.�RT���+E3c(���`�L M�� �3������d3� �/[�<+X�'a[�<� -�[ -���n� ^_� � ��03���`<:.� �� #y+0����`��D3����6���*(���T.`> �30����� ��� ������ o� ����.����<+ 3�� 3���� a- ����L �p.��D(��<T.����( ���������"I #;&,�"+E���"3���� �<hi�<`<3V��Nn3�����+X����(;T `� �3����������������� �����

Declarative region.SVN�3��<�V� �a*�����6+0����� 3�����+E� �7u� ��6� ���+ #�&,�"&V���y�.�'& ����30�0�*(�:�`��"3����!�����<`���+0�

3��<�0��������������[�c1j -`�� (.�<`�L ��� M3������ �. -+B -� -+0+E�*`��L M3���( B ��� *-,.=�,5���[p��Y=��"@$�"!$# �"b,����+V����������� ��+%3����� ��03R��N 3���� ���������� -� ��� &%�.��` � 3���� (���`�L M�� �3������ ����C�� ���+��"{*:�`�� ����������� `> -� pC�D p.��*`�/ #C NL:���`<3������ (.�7T ����30������# ���! d`<����30����v+G3� �3������<��3>�!^_� -��30�.�<+0� `� -+0��+R3���� (���`<L ��� �30����� ��+R+� -��( 3���. �a[� * !�h,5*����h!>(I� � S�(���`�� ��� �3������ `> �� -�+E� �. �a[� #�,.8�� �"(;, �h�?���h!>(I� #w��N2��3" ����C�> ��0+ ���.+E��(�� d� �����+E� -`�� #n+0���6{*��`<3������ �*����� �*� ���� ���� #n (���`<L ��� �30����� 30� M3!��+ ��:;3�+0��(��D��N -��� � ��E3���`�:�L ����3����<�X+E30��:�`<30:��0�"�. -+ @.* !�S�,5*_����!>(;� �SV+,&,�"�. �a[�!+0�<����# ���������� -�\�d ���`�����3� -��� +0�<a[�<�� -na- ����� �p.��R(.�<`�L ��� M3�������+ 3��. �3X -�C(��<T.���

a- ����L �p.��<+%��N�3���� � ,.82� � ������,bc����+c��+ !$#0*dD a� ����(Z��N��.� 3s&,� ��N 3�����+0� (���`�� ��� �3������.+c�. �a[�!3����+� -���B(���`<L ��� �30��a[�V�����������y�� ;���c�7u� -�6�.���#�3����RNL�����'&V����� `���(�� N��� -��������3,��+c����a- -���(�#*+E����`��BpC��3��(���`�L M�� �3�������+v��N

i�. �a[�X3����,+� -���,(���`�� ��� �3��~a[� ������������#��. -������!3����cNL:���`<3������ pC��(�� ��N.3����X�d ����

NL:���`<3������y��

int main()�

{�

int i = 5;�

int i = 6; // invalid redefinition of i�

return 0;�

}

Scope.Sx�. -���R����30�0�*(�:�`���(�p��Z (���`�L ��� �3������

D��+ pq,5*P� B ��� p����� S)* � ��� � ��E3%��N �~3�+,(.�<`�L �

�� �30�����0y@+V(���`�� ��� �3��~a[�!������������#i`� -����( 3���� ���h!>(I� ��N 3���� (.�<`�L ��� M3������y�%����3������ 3���� +0`����i�D��ND#

3���� �. -���D����30���*(�:�`���( p��D�d �� pC�6:�+0��( -��( -`<30: ���� ����NL�7��+ 3���3���� (.�<`�L ��� M3������

D# -��(

����3X30� -����3����<�X(���`�L M�� �3��������N 30�.�"+� -���R�. -�����^_�4����(��<� 3�� (.�7T ����3����+0`����C� #2&,�d�.�<��(z3�� ����3E���*(�:�`���3����30�<��� (I!.�<�>#0��� ,5*�����!>(I� T���+E3>�

b,�.� (I!.�<�>#0���",5*�����!>(;� ��N (���`<L ��� �30�����Z+E3� M�03�+V M3%3����!�C������3c&V���<���!30�.�"(���`�L ��� �3������ M�.�i�> ���+�� ;���X30�.� �. -���B3�� pi�"(���`�� �����(�30�.��+c��+X`> �����( ��3�+ (I!$�/#0� ! KFB ��� *-,.=�,5���J!$# � bc���R�C��3�����3��L -C+0`<���C��7u*3�����(�+ :���3���;3����X����(���N 3����%(���`�� ��� �3��~a[�c���<�������y� bc��� �L��!>(I� ��Ny "(���`�� ��� �3������

D��+g��p�3� �������(

N���������3�+R�C��3�����3��L -v+E`����C� -+!NL�����M&%+ � ����"�> -`�� (���`�� ��� �3������E��� 3���� �C��3�����3��L -v+0`<���C� ��N

D

Page 77: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� o�o

DD

E1E1

E2E2

E3E3

Figure 5:a !.�<�>#0���",5*����h!>(I� �G! K B �h� *-,.=�,5���J!$#0�

D, E1, E2, E3

! K��V�;�6� ,.82�6#�,.8��>AfB.=�,.1�# ,5�=>��� �J,.#;@$* � ��1����V� �V�;� ��!$= =>� � (I!$#�B.�/#;@ B �h� * ,.=h,5���J!$# �/# �V�;� :5(c(I�>=�* ��K����h!$= # �>= �<* ��K>� �!$# �V�;��= �[@.�c��A 1b�����h�b�V�;��=>� ��:4*T���[#;@9����!>(;� �s! K

D�hBc,.=)Z @$=h,.D A E1, E3

�<*P� @.�c��@$=�,.D ,.#�BE2

�J13���/�<� W

+0:�`��63��. �32pC��3��D -��(

E(.�<`�L ����,3����%+0 -���,� ���� #�3����X�C��30����3��� -;+0`����C�X��N

E��+2���<���Ma[��( N������

3���� +0`����C�"��ND� �����:;���!ID���~a[��+% +E�*�DpC�����`%�.��`<3�:;��� ��N 30�.� +0��30: M3������y�

^_�Z3���� �����7aF����:�+%� u� -�6�.�� #�3����!(���`�L M�� �3���a[�B���<�������Z��N�3����"(.�<`�L ��� M3���������Z������"I ��+c������R? ��>8 # ��3�+ �C��30����3��� -g+0`<���C� ��+ ������dI � �>8 #2 -��( �~3�+ +0`����C�d��+ ����.��I �FoZ�.�:�+ ����.� ����� �>8F� ;��� 3����(���`�L M�� �3������ ��� �������# # 3�����(���`�L ��� �3���a[� �0��������� ��+ ����.�6P � �>] -��( pC��30� �i��3�����30�L -2+0`����C�d -��(+0`����i� ���� ������ # � �>]F�

�j���> �/*�����Z(��M&%�=3���� +E`����C��+ ����3�� �������+ ��+!���=�������<�� -2����3!�C��+0+E��p.�� #n��N `���:;��+0� #�+0����`�� ������p����> �/*+%�d ��Ge_���V�d ��d����3'g, ����C�> ��V -�����+E3c ����*&%���<����� ^_N &,� &c -��3c3�� 3� -�/ �pC��:;3X+0`����C�!��� �������� p*� � ������Vp -+0��+ #F&,�!�. �a[� 30� NL�����d �3,3����R���������� -�H -`�`<����(���������[�

Control statements and scope.S%+cN M�V -+ 3����R��:����+,NL���c+0`����C�<+% ��0�"`�����`��7������(�#.`<����30����C+G3� �3����

������3�+ -`<3 ���/[�6p.��*`�/F+<� bc���<� `> ��z -�+0�ZpC�63�����:�����3 ��NX -+ �E������:;�.����� +E3� M3���������3�+ � -��(�# ���N -`<3 # ��+0� D`�����30����y+E3� M3���������3XNL���0��+% (���`�L M�� �3���a[�B���<��������p*���30+0���N �bc���<�0��NL����� -���=(���`�L ��� �3������ M�.�i�> ��������Z��� `�����30�0��g+E3� M3���������3 ��+ ��*`> - 3��Z3��. �3 `�����30�0��

+E3� M3���������3>�z^_� � M�03���`�:�L M� #230�.��+ ����.����<+ 30� a� ��0�L �p.��(.�7T ����(z���z3���� � � ����

� ��� � � � ��� ��NB for

� +E3� M3���������3>� ;���V�7u; -�6�.�� #F���

for ( unsigned int i = 0; i < 10; ++i) s += i;

std::cout << i << "\n";3���� �7u*������+0+0�����

i���Z3����!+0��`<���.( ����.�"(��*��+ # !.� �0��NL�<�B3�� 30�.�"a� ��0�L �p.��

i(���`<L �����( ���Z30�.� T���+E3

��������

Storage duration.�X�<L �3���( 3��630�.� +E`����C� ��N2 a� ��0�L �p.��!��+B��3�+ �>�<!$=h,$@c�RB.:4=�,5���"!$# �Rbc����+%30�<���

(�������3���+ 3����30���������z&%�.��` � 3����� �(.(;���<+0+ ��NX3����a- ����L Mp ����+ a- -���( # 3��. �3 ��+ #2+0��������������0�

Page 78: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

o�# ������� ����� ���� �9��� �3� � � ���

���`> �3��������+c -+0+E��������(�3�� ��3>� ;���% !a- ����� �p.��V&V��30����*`> �i+0`����C��#F3���� +G3����� -���B(�:;�� �3��������+ :.+E: ���� 30�.�V30�����V����&V����`��d3����

���������� -�Ry +"`<����30����2��+ ��� 3���� a- ����L �p.���y@+"�i��3�����30�L - +0`����C�-��QB:;������� ���������� -� �7uF��`�:;3�������#�30�.��+���> -��+ &%�.�<�.�7a[�<� 3���� a� ��0�L �p.�� (���`�L M�� �3������ +G3� �3������<��3 ��+v�7uF��`�:;3���(�#[+0����� ���������E�!���`> �3������ ��+ -+0+E��������(� ��.(3���� -(�(��0��+0+ pC��`������<+ a� -���(y�2S%�.(d&V�������<a[�7�X3����R�7uF��`�:;3���������<3�+ 3�� 3����R����(���N3���� (���`�L M�� �3���a[�j������������#-3����, -+E+0�*`��� �3���( ���������0� ��+vN��0����( -��(D3���� a- ����L Mp ��y@+� -(�(��0��+0+vpC��`������<+����a� -���(y� � � � �B3����<���<NL�����R���<3X �EN�����+0� ����+E3� -��`�� � ��Ny3����Va� M���L �p.��B�<a[�7�0�*3������V��3�+ (���`�� ��� �3���������+�7uF��`�:;3���(y�bc����+,pC���. �aF�����X��+X`> �����( ,.:;�<!$8�,5���"� ���<!$=�,$@c�YB.:N=�,5���J!$# � ;���X�7u� -�6�.���#F���

for ( unsigned int i = 0; i < 10; ++i) {

int k = 3;

// do something with k

}

3���� -(�(;����+E+V��Nv3����!a� M���L �p.��k�d >�`��. -����� ��� �> �` � ��3��7�� �3���������N 3���� ��*���n�,SV�+E� 3���� ������3��� -��

� � M3������d3�� 33� �/[��+c�.L -`��R���Z�� -`��Z��3��<�� �3������y�

;���B +0�����<&%� M3,�������R����3��7����+E3����.�D�7u; -�6�.�� #F`�����+0��(.�7�X3���� NL�����'&V����� `���(.� N��� -�����<��3>��

int i = 5;�

for (int j = 0; j < 5; ++j) {�

std::cout << ++i; // outputs 6, 7, 8, 9, 10�

int i = 2;�

std::cout << --i; // outputs 1, 1, 1, 1, 1�

}

{*����`��6�������8�pC���������+ 3��Z3�����+0`����C� ��N,30�.� (.�<`�L ��� M3������ ��� ����.��� # 3����6�<h ��`<3 ��N,������68Z��+!3������`<���<������3c3����"a- ����L Mp ��"(��<T.����( ��� ����.� �!�����<a[�<�0� �~3��<�� �30����� ��N 30�.�

for�_+E3� �30��������3�� mn���.� I #

����3����V��3����<� �. -��(�#�pi���������+j3�� 30�.�%+0`����C�B��NC3����V(���`�� ��� �3������6����������X?cz*3����V�<h ��`<3,��NC������VI!��+3����<���<NL����� 3���(���`<���<������3X3���� �EN�����+0� ��a- ����L �p.��

i��� �<a[�<�E� ��3��<�� �3�������#. -��( 3�����+V -~&c >�*+X���<+0:��3�+

���a� -�:.�1�

^_� `�����30�� -+E3 # a� M���L �p.�� 3��. �3V��+X(��<T.�.�<( ��� � �����+E� -`��"+0`����C� ���B�����p �n+E`����C� �. -+ �>�J,5���"��>�<!$=�,$@�� B.:N=�,5���J!$# ��b,����+ ���> -��+g30� M3 ��3�+, -(�(;����+E+c��+ (.�73��<����������(d M3 pC�������d��Ny3����V�.�0������ -�Ry@+�7uF��`�:;3������� ��.( ��3g(�����+g����3j` �. -����� e_������`�� �E+E3� �3���` �5g �����gpi��`������,����a- -���( :���3����30�.�c�7uF��`�:;3��������Nj30�.� ���������� �� ����(.+<� bc��� a� M���L �p.���+

std::cin -��(

std::cout#yNL���!���.+G3� -��`�� #C�. �a[� +G3� �3���`

+E3����� -���d(.:;�� M3������y� fj ����� �p.���+ &V�~3�� +G3� �3���`�+G3����� -���d(�:;�� �3������ ���� -�+E� �0��NL�<�0���<(43��= �+ �>�J,5���"�pw,.= � ,cS)* �>� �

2.4.4 Iteration: while-statements

{*�RN �� #�&,� �. �a[�,+0�����D����� ��3��<�� M3������ +E3� M3���������3 #�3����for

� +E3� �3���������3>�v5cW W������Ma*��(���+ 3k&,�B���������3��7�� �3������=+E3� �3��<������3�+<��b,���

whileH"�>�J,5�<�>8��>#0� ��+ +0���6�.���T.��(

for�_+E3� �3��<������3 # &V���<��� pi��3��

� � ����

����� � � � ��� -��( � ��� � ��������� ���� ������303��<(n� ^ 3�+X+G�F��3� MuZ��+

� ��F�=�� �� �6F�����(@�@%�������*@������� ��=F �� ���������6����'�A ����� ���� ����5����� ����:���( �!���! : ���� ����� �(� ��� � �E���:� � :����( G

Page 79: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� o�q

whilee�� ��� � ��������� g

����� � � � ���

&V���<�0��� ����� ��� ����� -��( ����� � � � ��� ���� -+6��� for

�_+E3� �3��<������3>� SV+ pC��NL���0� # � ��� � � � ��� ��+����NL�7�0����(43��= -+ 3����pi�*(;� ��N%3����

while� +G3� �3������<��3>� {*���d -��30��`> -�~� #v

while� +E3� �3���������3 ��+

� ��:.�~a� -�����3,3��D3����"`����E����+E�C����(������for

�_+E3� �3��<������3

fore3z � ��� � ��������� zNg

����� � � � ���

b,�.��� u;��`�:;3������ ���0(.�7� ��+!3����<���<NL����� � ����� ��� ����� # ������ � � � ��� # � ����� ��� � ��� #~���>�0:���3��� � ����� ��� ����� �0���3�:;����+ KL,5*P��� �{*����`��

while� +E3� �3���������3�+D ����+0� �> �+E� 3�� ���7&%����30� �+

for� +E3� M3���������3�+ #j&%��� (�� &,� ������(

3�������bc���c�d -��� ���> -+E���6��+ ���> -(. �p.����~3s�[�nSV+ ��3�+2�. -��� +0:�������+E30+ #* for

� +E3� �3���������32��+v3s���.��`> -�~��C�<�0`�����a[��( -+2 �E`���:���3������R������ �B��� &V����`�� 3����,����`<����������3 e_���2(���`<���<������3'g���N V+0�������� a- ����L Mp ����+!�0��+E�C����+0��p.�� NL��� 3���� ������������+E+ 3��M&c M��(�+"3��<�0�����. �3������y�d^_� 3�����+!`� -+0� #v3���� �����������<+0+ ��+ ����+E3`�����a[����������30�� �d -(�����z3����

for� +G3� �3������<��3 y + � ��� � ��������� � �g:;3 30�.�+0��30: M3������z`� -�zpC��������

`����6�.��7u �i3����2���������0��+0+n�d >�V(.�7�C����( ���"30�.� a- -�:���+y��N*+0�7a[�<�� -[a� M���L �p.���+ #����n��� +0�����v`<���.(���30�����3��. �3 &,�,`��.�<`�/ ���D3����c��*���+y@+ pC��(;�[�v^_�6+0����� ��N.3�����+0�c`> -+0��+ #*

while�_+E3� �3��<������3 ��+v������NL�7�� �p.����

b,�.� ���7uF3%+0��`<30������(���+0`7����pC��+% -�Z�7u; -�6�.����

The Collatz problem.}R��a[��� � M3�:;�� -n�*:��Dpi�<�

n � � #�&,�!`<���.+E��(��<�%3����6r !.*[* ,5� � ��� � : �># �h�x0(n), x1(n), x2(n), . . .

&%��3��x0(n) = n

��.(

xi(n) =

{xi−1(n)/2,

��Nn��+c�<a[���

3xi−1(n) + 1,��N

n��+c�*(�( i � 1.

;���B�7u; -�6�.�� #���Nn = 5

# &,� ���73V3���� +0� ��:�����`��5, 16, 8, 4, 2, 1, 4, 2, 1, . . .

�%{*����`��!30�.�!+0� �*:�����`�����<3�+ ���<�i�<3���3��~a[�� -+D+0����� -+

1 ����C�> M��+ #j&,��d �� +E3����w M3 3�����+ �C������3>� K �0������ -� # ���� -(�+ ���

��:��DpC�7�n -��( ��:;30�.:;3�+ 30�.� ��������<��3�+D��N%3����Z+0� �*:�����`��

(xi(n))i � 1

:���3��� 3�������:.� pC�<�1 ����C�> M��+��

�// Program: collatz.C

�// Compute the Collatz sequence of a number n.

�#include <iostream >

�int main()

�{

// Input

std::cout << "Compute the Collatz sequence for n =? ";

���unsigned int n;

� �std::cin >> n;

���

Page 80: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

#�] ������� ����� ���� �9��� �3� � � ���

���// Iteration

���while (n > 1) {

���if (n % 2 == 0)

���n = n / 2;

� �else

��n = 3 * n + 1;

��std::cout << n << " ";

� �}

� �std::cout << "\n";

� �return 0;

� �}

Program 8:(0=>!�@$� �_��!.*[* ,5� �5W r

bc���B������d`> -���Ny`���:;��+0�VpC�V&X����303��<�d -+, for

� +E3� M3���������3 &V��30�����6��3s� � � ����

����� � � � ��� -��(��� � � ��������� #�p.:;3230�.� ���<+0:��3������Ba� M���L -��3 ��N 3���� ���������� -� ��+ ��<+0+v���> -(. �p.�� +0���.`<�X��3v3E������+v3��$�E+0��� �3����"�� �3����<�X`����6�.���`> �30��( �~3��<�� �30������ �+V +0���6�.��R`���:���3����.�D������ �2SV+% ��:��� ��N�3���:��Dp #;��N�30�.�7�����+j +E���6�.�� ����� � ��������� 30� M3g`> M�.30:��0��+230�.�X��*���+y + �.�0��������+0+ #�:�+0�V

for�_+E3� �30��������3�� AB30�.�7�0&V��+E� #

`�����+0��(��<�XNL�����D:�L �3������ �[��:;�X��*���Z -+% while

�_+E3� �30��������3��b -�/*����� �pC��:;3 �����������<+0+ �6��+ �~3 `���> M� 3��. �3 3������*:�� pC�<�

1 -�&c ��*+ ����C�> ���+��\^_N,����3 #v3����

���������� -�collatz.C

`�����3� �����+ -�����;T.����3��c��*���6NL���,`��<�03� ����6a� ��:���+g��Nn�2^_Ni�[��:�� � >�D&V�~3�� 3����

���������� -� #��[��: &V��� ��p.+0�<�Ea[� 3��. �31����(�����( ����C�� ���+VNL���R �����:.� pC�<�0+%�[��: 30�0� #i ��3�����:����Z3�����+

�d ���3� �/[�" &%���������x2��: &%���iT.��(�#;NL���V�7u; -�6�.�� #*3��. �3,3����!5,���L �3 � +0� �*:�����`�� NL��� n = 27��+

27#82#41#124

#62#31#94#47#142

#71#214

#107

#322

#161

#484

#242

#121

#

364#182

#91#274

#137

#412

#206

#103

#310

#155

#466

#233

#700

#350

#175

#526

#

263#790

#395

#1186

#593

#1780

#890

#445

#1336

#668

#334

#167

#502

#251

#754

#

377#1132

#566

#283

#850

#425

#1276

#638

#319

#958

#479

#1438

#719

#2158

#1079

#

3238#1619

#4858

#2429

#7288

#3644

#1822

#911

#2734

#1367

#4102

#2051

#6154

#

3077#9232

#4616

#2308

#1154

#577

#1732

#866

#433

#1300

#650

#325

#976

#488

#

244#122

#61#184

#92#46#23#70#35#106

#53#160

#80#40#20#10#5#16#8#4#

2#1�

^ 3 ��+ �������<�� ����=pi������<a[�<( 3��. �31�7a[����3�:. -��� `�������+!:��zNL���D -�ga- -�:���+ ��N

n#2p.:;3 �d �3������

�d �3���`��L -��+,�. >a[� ����3V�[�73 pi����� �p.��!3��6������(�:.`<� �����*��Nv��Nv3�����+V`<���[rs��`73�:;�����BSV+V���.����`�����3B -+��3c�����/F+ #F3�����+ ������p.�����+,+0�<����+c30�DpC�! a[�<�0� � M��(Z�d �3������d M3���`> -.�*:;3c3�� `7�� -`�/i�

2.4.5 Iteration: do-statements

DoHJ�>�J,5�<��82�>#0�V� M��� +E������L ��B30�

while�_+E3� �30��������30+ # � u;`��<��3 30� M3"3���� `�����(.�~3������ ��+!�<a- -�:. �30��(

, K>�<��= �<a[�7�0����3��7�� �3������ ��Ni3����V��*���d���.+G3��> -(���N S>�/K�!$=>� �7a[�<�0����30�<�� �3������n� bc���<���<NL����� #F����`<����30�� �+E33�� NL����� -��(

while� +E3� �3���������3�+ #F3����RpC�*(;���N

do� +E3� M3���������3,��+X� u;��`�:;3��<( �3%��> -+E3c����`����

b,�.� +E�*��3� Mu���N do� +E3� M3���������3X��+X �+XNL�����M&%+��

do

Page 81: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� #;�

����� � � � ���

whilee � ��� � ��������� ghz

&V���<�0� ��� � � ����� ��� ��+,��Nv 3k���C� &%����+0� a- -�:���+c`> -� pC�"`<����a[�<�030��(Z3��bool

�bc���,+0���d ���3���`<+ ��+v(��<T.����(6 -+vNL�����M&%+���S%� ��30�<�� �3������D��N;3����,������ `<���.+E��+E3�+v��N�T���+E3 �7uF��`�:;3������

����� � � � ��� -��(�3������Z�7a� -�: M3������ � ��� � ��������� � ^_N ��� � � ����� ��� ���<3�:;����+ ��= : � 3������ -����3����<�X��3��<� � �3������ NL�����M&%+��jAB3����<�E&V��+0��#F3����

do� +E3� �3���������3 3��<������� M3���+�� b,���"�7uF��`�:;3�����������(��<�%��+,30�.�7����NL�����

����� � � � ��� # ��� � � ��������� # ����� � � � ��� # ����� � ��������� #y������:���30�� ����� � ��������� �0�<3�:;����+ K ,5*T��� �SV�3��7���. �3���a[��~� #j3����Z+0�<�d -��3���`�+ `���:��(4pi�Z(��<T.�.�<( ���430�<����+ ��NV30�.��NL�����'&V�����=� �*:���a- -�����3

for� +E3� M3���������3>�

forebool once = true; once ||

����� � ��������� zonce = false

g����� � � � ���

bc����+ pC���. �a[��+ ��~/[� ��:;� �E+E��� :�L M3������ �6��N 3����while

� +E3� �3���������3 #n�7u;`��7�.3!3��. �3!���=3���� T���+E3��3��7�� �3�������# ����� � ��������� ��+ ����3,�<a� ��:. �3���( e_(�:��B3�� +0�����03,`�����`<:.�~3 �<a- -�:. �3�������#�+0���!{*��`<3������ �*�@8F�98.g�# -��( ������ � � � ��� ��+c�7uF��`�:;3���( :���`�����(���3������. -�~�[�5,����+0��(.�7�B +0���6�.��R`> -�`<:.� �3���� � 3s���C� ����.���`> �30����� ����&V����`���3����":.+E�<�V����3��<��+V D+0� �*:�����`�� ��N

�*:�� pC�<��+ #C -��(= �N�3��<� �> -`��=��:��DpC�7�V3���� �.�0������ -� ��:;30�.:;3�+V3���� +0:��l��Nv3����D��:��DpC�7��+V����3��<����(+0� N ��>� �j� ����3��<�����.�

0#v3�����:�+0�<�D����(���`> �30��+!3��. �3 30�.������������ ��e+0����:��( +E3����n� bc����+ ��+ ����+G3

�. �3�:;�� -���4&%�0��303�����:�+0����� do� +E3� �3���������3 #%+E����`�� 30�.� 3��<�0�����. �3������ `�����(���3������ `> �� ������ pC�

`�����`�/[��( , K>�<�>= 3���� ���7uF3X�*:�� pC�<�c�. -+cpi����� ����3��<����(y�

int a; // next input value

int s = 0; // sum of values so far

do {

std::cout << "next number =? ";

std::cin >> a;

s += a;

std::cout << "sum = " << s << "\n";

} while (a != 0);

^_��3�����+,`> �+0� #���3c��+ # !.� �C��+E+0��p.��B3��D(.�<`�L ����a&%���<���R&,� &,��:��(:�+0:. -����(�� ��3 #F�. -����~�����������

(��L �3��<�� pC��NL�����c3����%���;�.:;32+E3� �3��<������3>� bc���X�0�> -+0������+ 3��. �3a&,��:��( 30�.�<� pC�%��*`> -;3�� 3����XpC��(;�

��N 30�.�do� +E3� M3���������3% ��.( &,��:.�(�����3,pC� a*��+0��p.��R���3����

do� +G3� �3������<��3 y + � ��� � ���������

a != 0�

2.4.6 Jump statementsS 3R3�����+V�C������3 # &,� &,��:��( ���/[� 3���7uF30����(=��:;� ���+0�<� �2��N2`�����30����v+E3� M3���������3�+%&V�~3��= 6+G�C��`��L �3k�*�C�"��N +E3� M3���������3�+ 3��. �3V M��� �0��NL�<�0���<( 30�� -+ � :489(��>�J,5�<��82�>#0�V� �\b,����+0�"+E3� �3��<������3�+X ����"����3����`���+E+� ��0������3����!+E����+0�"3��. �3c3����<�&,��:��(Z -���M&U�[��:Z30� (��6+0�����<30�.���.� &%�.��` ����+X����3c�C��+0+0�~p ����3����<�0&%��+0���6^_�.+G3��> -(�# rs:�+E3 ���/[�

while� -��(

do� +E3� M3���������3�+ e &%����`�� ���� -�+0�Z:�������`���+E+� ��0�=���

3��. �3 +0����+0� g�# rs:��6� � +E3� M3���������3�+V�����Ma*��(�� �(.(���30�����. - !.�7u;�~p �����3k�Z��� (���+0�������������3��<�� M3������ +E3� �3����������3�+�� x2��:w+0����:.�(�:�+0�Z30�.��+ ! � u;��p.����~3s� &%�.�7���<a[�<���3d ����'&V+ �[��:w3�� ���6�����'a[� �[��:;�d`���(.�-�$%�'&,�<a[�<� #�pC�V ��+0�!&c ��0�.�<(63��. �3 rs:��6� � +E3� �3���������3�+ +0����:��( pC�X:.+E��(�&V��3�� `> ����X+0����`��%3����<�D3�����(

Page 82: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

# � ������� ����� ���� �9��� �3� � � ���

3�� `����6�.���`> �30�V3����"`�����30�����!.�M&!� b,�.� `����6�.���`� �3������d��N�3���� `�����3E���� !.�'&x� �+c3��DpC�"p -� -��`���(p*� +0��������T.`> -��3 �[ -��� ���z�������NX3������3����<� `� �3�������������+�� bc���<�0��NL����� #g30�.����/ `� �����NL:���� pi��NL���������30���*(�:�`������D BrG:��6� � +G3� �3������<��3��S rs:��6�U+E3� M3���������3��d ��w�*`<`�:;� ����+0��(�� -�U��3��<�� �3������ +E3� �3��<������3������[� �������x rs:��6�

+E3� M3���������36��+6� u;��`�:;3��<( #,3����Z���������� -� !.�M& :.��`�����(���3������ ���� � rs:��6� + �=3�� =`��7�03� -��� �C������3>�b,�.�7��� ��0� 3k&,� (���h �<������3 rG:��6��+E3� �3��<������3�+<�bc��� T.�0+E3jrs:��6� +E3� �3��<������3c��+c`> -����(�

breakHJ�>�J,5�<�>8��>#0� zi��3>y@+c+E�F��3� Mu ��+,�� �3����<�X+0���6�.����

breakz

������� dp����� �/ �_+E3� �3��<������3 ��+ �7u;�<`�:;3���(�# 3���� +0�d -���<+E3R����`����+0���.���3��7�� �3������ +E3� M3���������3 30�<��������. �3���+ ��������(��L M3�����[� b,�.�D�7uF��`�:;3������ `�����3����*:���+" �3R3���� +E3� �3���������3 -N�3��<�"3���� ��3��<�� M3������ +E3� �3����������3 e ��N -��� g7�� ;���X�7u� -�6�.���#

for (;;) break;

��+,����3c -������T.����3��%��*���p.:�3,�� M3����<�c `����6�.���`> �30��(6&c ��d��N &%�0��3������ �*:��C+G3� �3������<��3>� $%�7���R��+ !�������X:�+0��NL:�C ����C�> M�� -��`��V��N

break�j^_�d��:;� `> ��`�:�L �3����j�7u; -�6�.��%N������ K -���B#;� #���3g&,��:��(6pC�

������� ������[ -��3B30� +0:;��������+0+R3���� ���0���<��<a- -��3" -(�(���3������ ��N0��� 30�.� L �+E3 ��3��<�� M3������y� bc����+R`> -� pC�

(������ &%��3�� 30�.� NL�����'&V���.� ��*���n�

for (;;) {

std::cout << "next number =? ";

std::cin >> a;

if (a == 0) break;

s += a;

std::cout << "sum = " << s << "\n";

}

$%�<����#[&,� +E��� 3���� 3s���.��`> -F:�+� ���� ��Nbreak

#�� ������� 3����,30�<�������. �3������!��N %��*��� �E+0�����7&V���<������3����"����(�(��� �;� X��3��R3��. �3,&,�!`���:��( � �*:���a- -�����3����&X����3��

do {

std::cout << "next number =? ";

std::cin >> a;

if (a == 0) break;

s += a;

std::cout << "sum = " << s << "\n";

} while (true);

^_� 30�.��+�`> -+0�for

��+6�����<NL�<�� �p.�� #c3�����:���� #c+0����`�� ��3d����`<����4���� -(�+ �+ �ENL���0�<a[�<���;��ABN!`<��:��0+0� #3���� +� -��� NL:���`<3������. -���3k�z��+��C��+E+0��p.��Z&V�~3�����:�3

break#Xp.:;3d3���� ����+0:��3����.� `<�*(�� ��� �*:����0��+ -�

-(�(���3������. - p ��*`�/ -��(Z�<a- -�:. �3��<+a != 0

3k&%��`����

do {

std::cout << "next number =? ";

std::cin >> a;

if (a != 0) {

Page 83: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� #�8

s += a;

std::cout << "sum = " << s << "\n";

}

} while (a != 0);bc��� +0��`�����(4rs:��6� +G3� �3������<��3d��+`> -����(

continueH"�>�J,5�<�>82��#0� z ��[ -��� 30�.� +E�*��3� 'u ��+

+0���6�.��-�

continuez

�������6 B`�����3����*:����_+E3� �30��������3 ��+ �7u;��`<:�30��(�#[30�.� ���<�d -����(��<�v��N�3����c+E�d -����+G3v����`����+0���.�B�~3��<�� �30�����+E3� M3���������3 y@+�pC��(�� ��++E/F�~�.�i��(�#R -��( �7u;�<`�:;3������U`�����3����*:���+� �33����=����(U��N!3���� pC�*(;�[� b,�����3��7�� �3������+E3� M3���������3X�~3�+0���Nn��+ # !.� 3��<�0�����. �3���(y�^_NV3�����+0:;�0�0��:.��(������=�~3��<�� �30�����z+E3� �3���������3 ��+6

while� ���

do� +E3� �3���������3 #j30�.� �7u;�<`�:;3������

3����<���<NL����� `�����3�����:.�<+"p*� �<a- -�:. �3����.���3�+�� ����� ��� ����� �D^_Ng3���� +0:;�0����:���(.���.���3��7�� �3������ +E3� M3���������3��+

for� +E3� M3���������3 #j3���� �7u;��`<:�30����� `�����30���*:���+ p��z�7a� -�: M3������=��30+ ��� � � ����� ��� ��.(430�.�<� ��3�+

� ����� ��� ����� �Bmy��/[� 3����break

+E3� �3���������3 # 30�.�continue

+E3� �30��������3%`> -� 3����<����NL���0�DpC� :�+0�<( 3���d -�����.:�L �3��c3����!`�����30���� !.�M& �E��� 3���� ����(�(.�� � ��N ��*���n�^_� ��:;�!`> ��`�:�L �3����R� u� -�6�.�� #C3����DNL�����'&V������a- ����L -��3!��N23���� ������ �����������<+"�����[ �30��a[� �����.:;3>�

SV�[ -��� #M��3 &,��:.�( pC�g�C��+0+E��p.��230�B(.�X3�����+ &%��3�����:;3continue

#� �3�3���� �7uF�i����+0� ��N� -����3����<�v����+G3���(p.��*`�/ �

for (;;) {

std::cout << "next number =? ";

std::cin >> a;

if (a < 0) continue;

if (a == 0) break;

s += a;

std::cout << "sum = " << s << "\n";

}

2.4.7 Equivalence of iteration statements^_� 3��<����+c��N �.:;��� NL:���`<3������. -��~3s� #F30�.�

while�� -��(

do� +E3� �3���������3�+V M���!����(�:���(. -��3 # -+%pi��3�� ��N

3������O`> �� � ��:���a� ������30�� pC�R�7u*������+0+0�<(Z:�+0����� for

�_+E3� �30��������3�� bc����+ �d ��6`7���> �3��B3����B���6�����<+��+0����� 3��. �3

for�_+E3� �30��������30+ �. >a[�������0� �7u*�.�0��+0+0��a[���C�'&,�<� 30� ��

while� ��.(

do�_+E3� �3��<������3�+<�

^_� 3�����+d+0�<`<3�������&,� +0���'&l3��. �3�3�����+d��+�.��3d3���� `> -+0���z -�V3��;����� ��3��<�� M3������w+E3� �30��������30+ M���NL:���`<3������. -�~��� �*:���a- -��<��3>� �������R������`���+E���� #;&,�"+E�.�'&x���M&)3��D:�+0�

� do� +G3� �3������<��3�+,3��D�7uF������+E+

while�_+E3� �3��<������3�+ #� -��(

� while� +E3� M3���������3�+ 3�� �7u*������+0+

for� +G3� �3������<��3�+��

^_N�&,� (�������3�� �A`> -��pC� :�+0��(�30� �7u*�.�0��+0+

B�Dp*�

A⇒ B#�&,� 3����<����NL���0�!�. �a[�

do� +G3� �3������<��3 ⇒ while

� +G3� �3������<��3 ⇒ for� +E3� �3���������3 ⇒ do

� +G3� �3������<��3,

Page 84: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

#�? ������� ����� ���� �9��� �3� � � ���

&V���<�0�&,�d/F���'&O3���� L �+E3 ���6�.���`> M3������ N������ 3����������<aF����:.+D+0��`73������y� b������<3����<� #23�����+ `���> ������G�����'a[��+ � 3���� `�L -������(d� �*:���a- -�����`��-� X��3�� 3��. �3%&,� � :;3X3����"&,����( (0=>!$pw� � �����*:���3���+ # -+%��:;�V�0�> -+0��������� `� -���.��3XpC�!`<���.+E��(��<����(

NL�����d �y��������N �%^_� ����(��<�%3�� ���> �����.�0�Ma[� +E3� �3��<������3X���/[� 3�����+ #�&,�!T���+E3B��N -�n&,��:��( �. �a[�3��dpC�D������� NL�����d -v��� (��<T.�.���.��3����D+0���d -��3���`�+B��Nj+E3� �30��������30+�� {*���d -��3���`�+R��N2�.�0������ -���������L -����:. -����+X��+V +0:;p rs��`<3%��N ��3�+%�'&V��# -��( 3����!NL�����d -y30���� �3�������3%��Nv+0�<�d -��3���`�+%��+c&c ���pC�<�[����(&V�. �3 &,�`> -� (�� ���<���-� ^_�z��3����<� &,����(�+ �db,��� NL�����M&%����� ��+ -+D� :�`�� ��N% �G�.�0�*��N �= -+ �[��:&V���C���<3V���<�0� #.p.:;3V�~3%��+X+0: �6`�������3X3�� :���(��<��+E3� ��.(Z30�.� ����L M3�������+ pC�<3k&,�����Z3���� 3��;�����!�~3��<�� �30�����+E3� M3���������3�+��

do-statement ⇒ while-statement.S

while� +E3� �3���������3

whilee�� ��� � ��������� g

����� � � � ���

`> -��� �*:���a- -�����3����pC� �7u*�.�0��+0+0��( p��30�.� NL�����'&V���.�do� +G3� �3������<��3>�,� �

do

ife�� ����� ��� ����� g

������ � � � ���

else

breakz

whileetrue

ghzb,�.��+g����(�:�`���+ �7u; -`<3�~� 3����

while� +E3� �3���������3 y@+2�7uF��`�:;3�����������(��<� � ����� ��� ����� # ����� � � � ��� # � ����� �

� ����� #~�<���0:���3��� � ����� ��� ����� ���<3�:;����+ KL,5*P��� -��( 3����"��*��� ��+,3��<�������. �30��( :�+0���.�break

while-statement ⇒ for-statement.S

for� +E3� �3���������3

fore � � ��� � ����� � � � ��� � ����� ��� � ��� z����� � ��������� g

����� � � � ���

`> -��� �*:���a- -�����3����pC� �7u*�.�0��+0+0��( p��30�.� NL�����'&V���.�while

� +E3� M3���������3>��

� � ��� � ������ � � � ���

whilee � ��� � ��������� g �

bool b�

falsez

whileeb = !b

g������ � � � ���

ifebgbreak

z��� � � ����� ��� z��

� ��� �,@�� ��(���)A ����6 ������ �����! �'�@"8 � @��( ��5�� ���� � � �� ���!G � 1���� �)�( �D� �6��A!9������� �����( �'�@ +.0���0�� 8 � @��( ����� ��� � � �� ���!G.�������F����� ����( �����68 �( �����&+�� 0�� � -��.���& ���$(��'�� ����(9� ��=;�68 �( �*���������� �6��' ���& ���$(��'�� ����(G

Page 85: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� #[I

b,�.��+X�����/F+,+0�����<&%�. �3,�������R`����6�.���`> M3���(�#*+0� ��<3c:�+%�7u*�.L -���d&V�. �3c��+c��������� �����.�7������ ���d �� +E:����C��+E� 3��. �3 3�������(�����3���T.�<�

b(�����+ ����3 ����C�> M� ��� 3���������a[���

for�_+E3� �30��������3��

X��3�� 3��. �3d3���� &V������ +E3� �3���������3dNL������+d +0�<� ��� �30� p.���`�/ #V �+ (��*�<+� for

� +E3� M3���������3>�YS�C��3��<��3��L �2(���`<L ��� �30�����=��� � � ���

� ��� � � � ��� �+"&,���j -+ 3���� +0`����i�6��Nb��+R3��*:�+ �������3���( 3�� 3�����+

p.��*`�/ �5,����+0��(.�7� -� �7u;�<`�:;3������ ��N 3����6��:;3��<�

while� +E3� M3���������3>�� ����+E3 # � ����� ��� ����� ��+!�<a� ��:. �3���(�#

-��(��N �~3 ���<3�:;����+ KL,5*P��� 3����B+E3� �3���������3 3��<������� M3���+�� AV3����<�0&%��+0� #F30�.�Va- ����� �p.��b��+ +0�<3,3�� ��= : �

��� 3����D���.���<�while

�_+E3� �30��������3>y@+B`�����(���3�������#i���� -�������63��. �3 ����� � � � ��� ��+R�7u;��`<:�30��( ���7uF3�� � �^_N ����� � � � ��� (��*��+6����3 `�����3� -���w

break# 3������������<� ��*��� �7a� -�: M3���+ �~3�+ `<���.(���30�����zNL���630�.�

+0��`<���.( 3��������"^_�=(��������d+0� #b��+R+0�73 30� K ,5*T��� # ��.( 3���� `�����(.�~3������ ���<3�:;����+ KL,5*P��� � bc���<���<NL����� #

3���� ���.���<�"������=3��<�0�����. �3���+�� {*����`��b��+ ���M& KL,5*P��� # ��� � � ��������� ��+"�<a- -�:. �30��( ���7uF3 #nNL�����'&,��(

p*� � ��� � ��������� � b,����+ ����(�:.`<��+ 3����for

�_+E3� �3��<������3 y + �7u;�<`�:;3������ ����(��<� � ����� ��� ����� # ����� � � � ��� #��� � � ��������� #�� ����� ��� ����� #~�7���E:.��3��� � ����� ��� ����� ���<30:��0�.+ KL,5*P��� -��(�3���� ��:;3��<�X��*���3��<������� M3���+��^_� 3����,`> -+E�c&%�.�7��� ����� � � � ��� `�����3� �����+

break#�3����X�������<� ������ 30�<�������. �3��<+ ��������(��L �30���� #

-��(b�����d -���.+ ��= : � � ^_�=30�.��+B`> -+0� #y&,� -�+0��3��<�0�����. �3��!3����D��:;3��<� ��*��� 3��. �3R���<�����<+0����30+"��:;�

����������� �for

�_+E3� �30��������3��^_N �[��: ���M&x�C����(��<�V MpC��:;3V -� �� -+0���<�X&c �� 3��6 -`��.���<a[�"3����! �pC�'a[�"����NL���0� :�L �30��������N

for���

3��<�0��+c��Nwhile

#;�[��:Z�d ��d`������R:;�Z&V��30� 3���� NL�����'&V����� +0���:;3������n��

� � ��� � ������ � � � ���

whilee � ��� � ��������� g �

������ � � � ������ � � ����� ��� z��

^_��(�����(�#j3�����+ &%���g&,���0/ # :N#0* � ��� ����� � � � ��� `�����3� �����+ continue

� ^_�z3����for

�_+E3� �3��<������3 #�7uF��`�:;3������6&,��:��( 30�.�<�6�.�0�*`����<(6&V��3�� 3����%�<a- -�:. �3������6��N ��� � � ��������� #�p :;3g��� 3����%� �303��<�

while�

+E3� M3���������3 # � ��� � ��������� ��+!+G/F�����C��(�#� -��( � ����� ��� ����� `�������+!���7u*3>�db,�.��+"L M303��<� ����NL�����D:�L �3��������+ 3����<�0��NL������&%�������;� ^ 3 ��+ Z���*�*( �7uF�<��`���+0��3�� ` ����`�/ 3��. �3 30�.�6T���+G3 a� ��0�L -��3 &,���E/F+ �<a[��� ���3����V������+0�<�.`<�"��N

continue#; -��(d3��. �3 rs:��6� +G3� �3������<��3�+ ��+0� `> -:�+0�R��� �. ���� ���d��:;� �����<a*����:�+

����NL���0� :�L �30�����d��N�3����while

� +E3� �3���������3c��� 3��7����+,��N�3����do� +G3� �3������<��3>�

2.4.8 Choosing the “right” iteration statements� � �. �a[� +0�<���Y3��. �3 N������ NL:��.`73������. -!�C������3 ��N a*���<& #!3����

for�_+E3� �3��<������3 #"3����

while�

+E3� M3���������3� ��.( 3����do� +E3� �3���������3 ����=� �*:���a- -�����3>� �����0���Ma[�7� #B3����

break -��(

continue+E3� M3���������3�+B ���� �0��(�:.��(. -��3>�"{�3���� # 5cW"W ��h �<��+R -����N 30�.�<+0� +E3� �3��<������3�+ #i -��( 3�����+B����a[��+V�[��:3����N�������(���� e p.:;3 ��+0� 3����p.:;��(����Ng ��N%`����*��+0����� 3���� ����.�0���.�0�L �3���`�����30���� +E3� �3���������3�+ NL����[��:;�X� ��E3���`�:�L �� ���������� -� ��=���~3������ ���������� -��+ ��+, (��*�. -����`%������`���+0+��j1va[��� 3�����:����d3����V�.�0������ -�O�d ��6(�� &V�. �3 �[��:

&c -��3g M3 +0����� �C������3 #�3����,�0� �*:������<������3�+v`��. -����� #� -��( �[��: &V����/[���<��`��. -���������B3����c���������� -� ���� � ����6��'�' �� �6F�����(�������! �� �� �*�(� � ������=�*����� ��� �� ���� �� C $=�='# ���=3 �#���'�� 3�;�=� ��� �� �@ G

Page 86: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

#�P ������� ����� ���� �9��� �3� � � ���

3����cNL:�30:��0���21 a[������N.3����<�0�%��+ `�:;�0���<��3���D���!�����<( 3��!`��. -�����,3����XNL:���`<3������. -���3k� ��N 3����,���������� -� #�[��:w�d �� &c -��3 3�� ���<�.L -`��Z =`����6�.���`> M3���(z�~3��<�� �30�����z+E3� �3���������3 p�� -� � ��:���a� ������3 +0���6�.��<�NL�����D:�L �3������y��bc���R�������<�� -i30�.�<���B�.�7���"��+ =>��KL, �>�<!$= �/#;@ �23����B�.�0�*`���+E+c��Nn���<&X����3������ ���������� ��3�� ���6�����Ma[�B�~3�+c�0�> -(. �p.�����3k� ���%+E3E��:�`<3�:;��� #;&V������R/[�<�<�.����� ��3�+,NL:���`<3������. -���3k��:��.`��. -������(y�$%�<��� ��+! +0���6�.�� ��:���(�������.� NL���"&%����30����� �E�����*( � ��*���.+��d5 ���*��+0� 3���� ������ 3��. �3"��> -(�+R3��

3���� ����+E3 =>�h,cBc,cS)* � -��( ��!$# �>�/��� NL����� :�L M3������y� b,����+X���� -��+

� NL�<&x+E3� �3���������3�+ #

� NL�<&x����.�<+c��N�`��*(�� #

� +0���6� ��B`�����30�0���!.�'& #� -��(

� +0���6� ��B�7uF������+E+0������+��

SV�����+E3X���<a[�<�R3����<���!��+ �V�;� ����� -��( �������pC�<+E3BNL�����D:�L �3������0z����M&,�7a[�<� #i3����<��� ���� -�&c ��*+ �����:. �p.�� p -( `�������`��<+V&V����`�� �[��:=+0����:��( 30�0�Z30� �a[����(y� �%+0:. -��� #.30�.�7���D ���� +0�����!3E�� -(�����hi+ #���/[� NL�7&,�<���������+���N!`���(�� a[�7��+0:�+ �����0� `����6�.���`> �30��( �7uF�����<+0+0������+ #B ��.(�3����<��� ��+ -�+E� +E����� -����:���3V��N2�C�7��+0���. -�3� �+E3�� ����a[��~a[��(y�bx2��: +0����:��( � uF�C�<�0������`��D -��( T.��( ��:�3B&%�. �3R+0:���3�+V�[��:pC��+G3>�mn�73R:.+B��*��/� �3B+0����� � u� -�6�.���+c3���+0���'&Y&V�. �3%&,� ���> -�y�B{*:;���C��+0� �[��: &c -��3V3�����:;30�.:;3

3����,�*(�(D�*:��Dpi�<��+ pC�<3k&,���<�0 -��(

100�v$V �aF����� rs:�+E32��> ��0�.�<( �pi��:�3v30�.�

continue+E3� �30��������3 #

�[��:Z�d ���&%�0��3��B3����"NL�����M&%����� ��*���n�

for ( unsigned int i = 0; i < 100; ++i) {

if (i % 2 == 0) continue ;

std::cout << i << "\n";

}

b,�.��+B��+V�C�<��NL�<`<3��� `����E����`<3 #ip.:;3R3���� NL�����'&V����� a[�7��+0����� ��+V������NL�<�� Mp �� +0����`�� ��3R�. -+fewer state-

ments ��.(

fewer lines of code�

for ( unsigned int i = 0; i < 100; ++i)

if (i % 2 != 0) std::cout << i << "\n" ;

b,�.��+6a� ��0�L -��3d+G3����X`�����3� �����+��.�<+E3���( `�����30�0��B+E3� �3��<������3�+�zVp :;3��[��: `> -�����<3d����(���N 3����if�

+E3� M3���������3% ��.( ��p�3� -��� `��*(��R&V��3��simpler control flow

for ( unsigned int i = 1; i < 100; i += 2)

std::cout << i << "\n";

bc���,+� -��� ��:;30�.:;3 `> -�DpC� �����*(�:�`���(D&V��30� while

� +E3� M3���������32 -��( � ��:. -��� +E���6�.��g`�����30����!.�M&!�

int i = -1;

while ((i += 2) < 100)

std::cout << i << "\n";

Page 87: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� #[o

�g:;3%���<�0� #;3����"`�����(���3������ ��+,�������R`����6�.���`> �3���(�#�+0����`��R��3c`���� p ���.�<+X �+0+0������������3c -��(�`����6� �� ���+0��� ���C�7�� �3�����+<� {*:.`�� �7uF������+E+0������+ �����`����6� ��� �3���a[��~� (�� � `�:��3 3�� :���(��<��+E3� ��.( (�:��63�� 3�����<h ��`<3 ��N.3����% �+0+0������������3j���i�<�� �3������n� SV�+0� #�3����c������3��L ��� � �30�����!��N i 3�� −1

��+2`���:���3��7� � ����3�:���3���a[��#����a[��� 3��. �3,&,�"(��> -y&V�~3�� �. �30:��� -y�*:��Dpi�<��+��

x2��: `> -� +E���a[�j3����2L �3030�<� ������p.��<� ��.( �3 30�.�j+� -���v3������v���73simpler expressions

p*� &%����30�����

unsigned int i = 1;

while (i < 100) {

std::cout << i << "\n";

i += 2;

}

b,�.�B������`<�V3�� � ��d��+ 30� M3 �[��:����<3,��<+0+,`�����`���+0�R`���(.��zF3����<��� ����R���M& T.a[�R����.�<+ ����+E3��> �( ��Ny3����3k&,� ����.�<+,30� M3c30�.�

for� +E3� M3���������3X�����<(.+<�g^ 3X+0������+,3��. �3cNL���%30�.� +0���6�.��X�.�0��p ����\��N�&%���~3������

��:;3%��(�(��*:�� pC�<��+ #� for

� +E3� �3���������3,&V��3������ � � ���������i += 2

��+ 3����!���������N `�������`��-�

2.4.9 Details

Halting problem.bc���R�. -�3����.� ������p.��<� ��+,����� ��Nn3����RNL:.��(. -������3� - ������p.��<��+ ���d3����R30�.�<���0�

��Nn`����6�.:�3� �3������y� ^_��NL�����d ����D+E�C�> M/F����� #*3����V������p.����O��+ 3�� (.�<`���(��V&V���<3����<�X ����a[�<����������� ���. -�3�+me 3��<������� M3���+ gi&V����� �7uF��`�:;3���(D��� X����a[���D���;� :;3me ���������� -� +E3� �3�� g7�vb,�.� 30�<��� �G���������� -� �(��*��+n����3 �0��NL�<� 3��X X5XW W � ���������� -� �.�7��� #�p.:;3 ��3n���> -��+C�.�0������ -��+y��� ,�D:.`��!&%��(��<�n+0����+0��� b,����j����30��+0�d�d �3������d �30��`��L -� SV� -�b�:;������� e��>q;� � ���>q[I-?5g (��<T.�.�<( ��� +0������� �.� ��C�7� !3����������73���`> -���*(����NL���!`����6�.:;3� �30������# `> �����(=b�:;���������d -`���������� $%� �����'a[��( 3��. �3 ��� 3����Db�:;�������d�d -`��.���.����*(���i30�.� �. -�3����.� ������p.����\��+,:���(���`���(. �p.������� M3 (�����+ �E:���(���`���(. �p.�� � ���> -� � � �2� �a[� +0���<� ,+E���6�.���������!NL���n&V����`�� ��3C&c -+C� -����NL:����

�<a*��(�����3R3��. �3 ��3 ��+ -� ����T.����3��!��*��� #C�. �a[���0y 3 &,�'�Ex2��+ #y����(�����(=����� �h,.# (.�<`���(��D30�.� �. -�30�����������p.���� NL���R�d -��� `�����`<���<30� �.�0������ -��+�� �%����`���(. �p.�� ���> -��+%30� M3se_��� � ��E3���`�:�L ��X���*(���n��N`����6�.:;3� �3������4g%3����<�0��`> -������3 pC�d -� -��������~3�����&%�.��` � (���`���(.�<+ 3����6�. -�3�������������p.��<� NL��� ,5*/*(I!.�>�h�"S)* � �.�0������ -��+��b�:;���������d -`���������+V M��� &V��(.�<��Z �`�`��<��3���( ���*(���n��N `����6�.:;3� �3������y�,S 3V3���� +� -��� 3������! -+

b�:;������� #�3����VSV���7����`> -� �d �3������d �30��`��L -� S%���� � � 5 �*:;��`�� e��>q�]�8 � �>q�q[I$g (��<a[������C�<(d "`����6�.:;3� �3������. - ���*(���C`> -����(

λ� `> ��`�:��:�+��vSV+c��3,3�:;������(���:;3 #Fpi��3�������(.�<�+, ����R� ��:.�~a� -�����3c���3��<����+,��N

3��������2`����6�.:;3� �30�����. -��C�'&,�<�>� b,���V5 �*:;��`�� �kb :��0�����"3�����+0��+2+G3� �3���+23��. �3 �E�<a[�<�0� NL:���`<3������D3��. �32��+�. �3�:;�� -����pC�"�0���[ ���(���( -+X`����6�.:;3� �p.��B`> -� pC�"`����6�.:;3���( p�� Db�:;������� �d �` ������� �;�jSV+X30�.�7�����+2���"���������0��:.+2(��<T.����3������D��N &%� M3g��+ �E�. �3�:;�� -��� �����[ M��(���(� -+j`����6�.:�3� �p.�� � #-3�����+ +E3� �3���������32��+����3c !3������������Op.:;3c �����C��3�����+0��+ 30� M3,`> -������3 pC�B�.�0�Ma[��� �d �3������d �30��`> -�~�[�CSV+,��Ny30�*(. �� #*3���������C��3�����+0��+v� �+v�.��3vpi����� (���+G�.�0�Ma[��(y� ^_� 3����������<30��`> -F`<���6� :;3��7�v+0`����<�.`<�,30�.� 30�<��� ��!$89(0:;�J,cS)* �:�+0��(�&%��3�����:;3 NL:;�03����<���*:. -��~T `� �3���������+c +E�*�.�����F�\NL��� �E`����6�.:�3� �p.��%p*� b�:;�����.� �d -`�������� �;�

The switch-statement.�g��+0��(���+

if�����

else3����<�0� � u;��+E30+ +0�<`�����( +0�����`<3�������+E3� M3���������3����

5cW"W �v3���� ��1����<�>�cHJ�>�J,5�<�>8��>#0� � ^ 3g��+g:�+0�<NL:. 3�� +0�����`<3gpi�<3k&,�����d�d -��� -~3��<���. �3��~a[�X+E3� �3���������3�+ #:�+0����� 3����"NL�����M&%�����D+G�F��3� MuC�

Page 88: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

#�# ������� ����� ���� �9��� �3� � � ���

switche�� ����� ��� ����� g

����� � � � ���

b,�.� a- -�:�� ��N�� ����� ��� ����� �D:�+E3RpC� `�����a[�<�E3���p.�� 3�� -�=����3������� � 3s���C��� ������ � � � ��� ��+R:�+0:. -�~� p.��*`�/d3��. �3c`�����3� -����+,+0�<a[�<�� - *-,cS>� *P� ��N�3���� NL�����

case � ��� �� � �

&V���<�0� � ��� � � ��+R 6���3��<�� -���N2����30������ -�3k���C��� ;���"����3k&,�dL �pC���+V+0�. -��30�.�<+0� ���3��<�� -�+%�. �a[� 3����+� -���Ba- -�:����jbc���<�0�"`> �� -�+0�DpC�" DL MpC��default:

�bc���"+0���d -��3���`�+ ��Nv +E&%��3�`�� � +E3� �3���������3c��+ 3����"NL�����M&%�����;� � ����� ��� ����� ��+c�<a� ��:. �3���(� -��(�3����

����+E:.~3 ��+g`<���6� M����(63�� �> �` �d��NC3����V��~3��<�� -�+2&%�.��` �d M�.�i�> �� ���d "L �pC��.��� ����� � � � ��� �v^_NyNL���, -�����N�3������ 3���� a� -�:.�<+j �������� #�3���� �7uF��`�:;3������D`�����30���*:���+2 �3v3����,+E3� M3���������3v��������(��L �30����RNL�����'&V���.�3���� L �pC�� �j^_Nn3����<���"��+X��� -�����������<��3,p.:�3%

default:L �pC�� #*3����"� u;��`�:;3������Z`�����30���*:���+X �3c3����

+E3� M3���������3 ��������(��L M3����� NL�����M&%����� 3����default:

L �pi��_��AB3����<�E&V��+0��# ����� � � � ��� ��+ �����.���0��( -��(�3���� �7u;�<`�:;3������Z`�����3�����:.�<+% -N�30�<�X30�.� +E&%��3�`�� � +E3� M3���������3>� X��3��B3��. �3

switch������d+0����<`<3�+c -���<��30�0�d�C������3,NL���,3���� ������`���+0+E�����D��N ����� � � � ��� #F��3,(��*��+

����3 �7uF��3 &V������3����V� u;��`�:;3������d�0�> -`�����+c -����3����<� L �pi��_�v^_Ny�����%&c -��3�+g3�� +0�7� M�� �3��V3����V(���h �<������3 -�30�<���. �3���a[�<+ #[���.�c�. -+ 3��!:�+0�

break�j5,����+0��(.�7� #[NL��� �7u; -�6�.�� 3����%NL�����M&%�����V� ����`��c��Ni`��*(��X -��(

��<3c:�+%+E:����C��+E� 3��. �3x��+% a� M���L �p.��R��N 3k���C�

int�

switch (x) {

case 0: std::cout << "0";

case 1: std::cout << "1"; break;

default : std::cout << "whatever ";

}

;���x==0

3����j��:�3E� :;3 ��+01

z�NL���x==1

3����j��:;30�.:;3���+1z���3����<�E&V��+0� &,�g���73�3����2��:�3E� :;3

whatever�

bc���B+E&%��3�`��d+E3� �30��������3j��+g�i�M&,�<�0NL:. ����3����V+0����+0�B3��. �3g��3, -���M&%+23����V(���h �<������3c -�3��7���. �3���a[��+3�� +0�. ��0�B`��*(����2$%�'&,�<a[�<� #�3�����+g�C�'&,�<�c -�+E� �d �/[��+ +G&V��3�`��d+E3� M3���������3�+ �. ���(�3�� ���� -(� ��.(d�<�E���������������� S N���� �*:�����3g�.�0��p ����|��+j3��. �3g���.�XNL�������<3�+j3��!�.:;3

break&V���<���c3����<���V+E�.��:��( pC�%�������

b,�.�7����NL����� # &,� ������30�����switch

���<��� NL��� `����6�.��<3��<�.�<+0+"������[�6���������<a[�<� 30�.�7���� ���� ���.~�= NL�<& -�30�<���. �3���a[�<+ 3��Dpi�"(���+E30������:.��+0����(�#��.L ��d��3c+� -NL�" -��(�:�+0�

if�<���

else�� �3����<�c3��. -�

switch�

Point of declaration.AB:;� M�.�����[ �` � ��Ng(��<T.���������C��3�����3��L - +E`����C� -��(=+0`����i� ����.� p�� ������ ��+

+0���6�.��~T `� �3�������#��<a[�<����NC3����R`��*(��B��+ +E:.�~3� �p.��6NL���0�d �303���(d ��.(d&,�R������6�. �a[�R���.�B(���`<L ��� �30������C�<�X��������2b,��� 30�0:�30�Z��+ 3��. �3c3���� �C������3c��N�(���`�� ��� �3������ ��N

i���

int i = 5;

��+,���d3���� 8Y�"BcBN* � ��N 3����R(���`�L M�� �3�������#* -N�3��<�,3���� � ����i�. -+c ����C�> M����(y�2bc���R�C��3�����3��L -i+E`����C�

3����<���<NL�����"(�����+,�.��3c����`��:.(��V3����RNL:��C������ #�p :;3c������63����B� ��03c+E3� M�03������ N������=�gb,����+ �7u*� � -����+

&V�. �3g�. ����C����+g���630�.�%NL�����'&V����� `��*(��VN��� ���������3 #[p.:;3 NL���03�:��. �3���~� 3�����+j��+g`<���.+E��+E3�����3 &V�~3��6��:;��������� p*� � ������R ��������[ -`��y�j^_��

int i = 5;

Page 89: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� #�q

�{

�int i = i;

�}

3���� �. -���i -N�30�<� 3����

=��� ������ 8����NL�<��+"3���3���� (���`<L ��� �30�����=���=������ 8F�5 ����+0� ��:.�<��3��� #

i��+

������3��� -�� � �<(6&V��3�� ��3�+0�<�N ����3�����+,������ #;���> ��.���.� 30� M3X�~3�+ca- -�:��R&V��� pC� :.��(��<T.����(�#. -��(Z����3 5�

^_� ��3����<� +0��3�:. �3������.+ �~3 �d �� �. ����C����#23�����:.����#23��. �3 30�.� ����C�> M�� -��`����NB �. -���d��� 3����(���`�L M�� �3������ ��N 3����6+� -��� �. -���D�0��NL�<��+ 3��Z (0=>�>p��J!$:;� (���`�L M�� �3������=��N 3�����+"�. -���-� ���� �.�'& #&,�B`> -��> -+E���� >a[����(+E:.`�� +0:;p.30��<3����<+gp*�630�.�BNL�����M&%�����"��:����� -����(���`<L ��� �30�����6+0����:��(d`�����3� -���3���� � ����R30� pC� (���`�L ��0��(Z������d����`����

The Collatz problem and the ?-operator.b,����5 ���L �3 � +E� �*:�����`���������+"p -`�/ 3���3�����}R�<���d -�

�d �3������d M3���`��L �� my��3��. ��B5,���� �3 � e0�>q;�>] � �>q�q�].g &%�.��+G3�:�(.����( ��3V��� 3������>q�8�]�y +��B{*�7a[�<�� - ����� � ��+�. �a[� pi�����=��h �<����( 3�� -���[����� &V���6�����'a[��+ ���R(.��+E�����Ma[�<+R30�.� `�����rs��`<30:��0� 30� M3V3���� �*:��Dpi�<�

1 ����C�> M��+X����3���� 5 ���L M3 � +0� �*:�����`��!��N �<a[�<�0���*:�� pC�<� n � 1� b,���!N -����:�+c$%:����[ ����L ����d �3������

�d �3���`��L -��K� -:�y1 ��(����+ke��>q;�>8 � �>q�q�P.g2��h �<����(��500

#*&%�.��` ���+ �D:�` �dp*�d����+ +G3� -��(. ���(�+be_��� :�+0�<(3�� ��hi�7�%�D:�` ���'&,�<�c -����:���30+ NL���,a[�<�0�(�� �6`�:��3g�.�0��p �����+ g7�v1v��(����+c+� -��(d3��. �3 ���Z �3������d M3���`�+��+c����3c�[�73%���> �(��NL���%+0:�` �Z������p.��<��+ �;�v^_��(�����(�#;3����"`�����rs��`<30:��0�!��+c+E3����C:.��+0��~a[��(y�� �"� �a[� �.�0��+0����3���( 3����"`<���6� :;3� M3������d��N�3���� 5 ���L M3 � +0� ��:.�<�.`<� -+V �� ����.���`> �30�����d��N�3����

while�_+E3� �30��������3 #2�C������3������ ��:;3 3��. �3 30�.�`�����(���3������. -g` �. -�������N

n��+ 3���� `<���6� ���`> �3��<( 30�

�.:;3 �~3 ����3�� for

�_+E3� �30��������3>y@+ ��� � � ��������� � �=��� #v3��. �3 y + �.��3D�7u; -`<3�~� 30��:�� ��3����d(.�<+0�������<��+��NR5 # 3���� ������`�:;��+0���R3�� 5cW"W #n� �(= &,�> M/F����+0+ NL���Ra[�<�0� `����6� -`<3V`��*(��D -��( `� -��� :;�=&V�~3��3���� �h!$#�B.�����"!$#�,5*�!>(;�>=�,5�<!$= 3��. �3X -���'&V+,:�+X30� +0���D:�L �3��

if� +G3� �3������<��3�+ p*� �7u*�.�0��+0+0������+�� bc���

+E�*��3� Mu ��N�30�.��+,30�<���. ��0����C�<�� �3����c��+

� ����� ��� ����� � ��� � � ��������� ��� � ��� � ��������� �

$%�<�0� # � ����� ��� ����� ��+2 -� � uF������+0+E����� ��N V3s���C�,&V����+0� a� ��:���+ `> -� pi�c`<����a[�<�030��( 3��bool

#� -��( ����

� � ��������� �6 -��( ����� � ��������� � ���� �7uF�����<+0+0������+��jbc��� +0���d -��3���`�+,��+c -+cNL�����'&V+<� ����+E3 #�� ��� � �����������+ �<a- -�:. �30��(y�j^_Ny��3 �0�<3�:;����+ ��= : � # � ��� � ��������� � ��+ �<a- -�:. �3���(�#* -��( ��30+ a� -�:.�B��+ ���<3�:;������(� -+ 3����a- -�:��B��NC3����B`����6�C��+0��30�%�7u*�.�0��+0+0�����y�jAV3����<�0&V��+0�ie_��N � ����� ��� � ��� ���<3�:;����+ KL,5*P��� g�# ��� � � ��������� �d��+�<a- -�:. �3��<( #F -��( ��30+ga� ��:��B��+ ���<3�:;������(y�2b,�.�B3���/[�<�

?��+ +0� �*:�����`��R�C������3 e_+0���"{*��`<30����� �*� �*�JI$g�#

���> -�������63��. �3 �� �<h ��`<3�+"��N � ����� ��� � ��� M��� �.�0�*`���+E+0��(=pC�<NL����� �<��3����<� ����� � ��������� ����� ����� � ��

������� �Z ��0�"�<a- -�:. �30��(y��%+0�����c3���� `�����(���3������. -����i�<�� �3���� #�3����g��*��� ��N�Kv�������� -�

collatz.C`���:��( ��:.�~3��j`<���6� �`<3���

pC�R&%���~303����� -+XNL�����M&%+be_+0�����Bp.L -�;/F+,������3030��(30�DT�3X��3c���Z�����"����.� g7�

for ( ; n>1; std::cout << (n%2==0 ? n=n/2 : n=3*n+1) << " ");

� � ��> �a[�"��3c:���3�� �[��:�30� (���`���(��R&V���<3����<�c�[��:Z��~/[�R30�.��+ca- ����L ���3,pC�<3030�<�>�

Static variables.bc��� (.��+0`�:�+0+0�����4 �pC��:;3D+E3����� -���(�:;�� �3������z �pC�'a[��(��*�<+ ����3 30��� 3����&%������

+E3����E� � ��3 ��+6 -�+0�=�C��+0+E��p.��30� (��<T.�.� a� ��0�L �p.���+D&V��3��z��*`> �X+0`<���C��3��. �3 �. >a[� +G3� �3���`+E3����� -���(�:;�� �3������y�

Page 90: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

q�] ������� ����� ���� �9��� �3� � � ���

bc����+ ��+�(����.� p*�4�����<�i����(.���.� 30�.� /[�<�*&,����(static

3�� 3�����a- ����L Mp ��Z(���`�L ��� �3������y� �����7u; -�6�.�� #F���

for (int i = 0; i < 5; ++i) {

static int k = i;

k += i;

std::cout << k << "\n";

}

3���� -(�(��0��+0+,��Nk�����d �����+g3����B+� -���B(�:;������� -� ��3��<�� M3�������+ #F ��.(

k��+ ������3��L -�� � ��( 30� i !$# ���

!$#0*dD #y��� 3���� T���+E3 ��3��<�� �3������y�Rb,�.�D �pi�Ma[� �.����`�� ��N2`��*(�� &V��� 3����<�0��NL����� ��:;30�.:�3B30�.� +0� �*:�����`����NCa� ��:���+

0, 1, 3, 6, 10e �������<�DpC�7� } -:�+0+ g7�v����3�����:;3 3����

static/[�<��&,����(�#F3����V����+0:��3 &,��:��(

+0���6�.�� pC� 30�.� +0� ��:�����`��!��N �7a[��� �*:�� pC�<��+0, 2, 4, 6, 8

�{�3� �3���`,a- ����� �p.���+ �. >a[�cpC����� �*:���3��c:�+0��NL:� ����5 #�NL���j�7u; -�6�.�� 3��!`<��:.��3g���'&w��N�3����d B+E�C�<`���T.`

�.����`��D��Ng`<�*(�� ��+"�7uF��`�:;3���(0z ��� 5cW"W #n30�.�7�= M��� ���+0+ ���6�C���03� ���3 #C ��.( ��Nj30�.�7�= M��� :�+0�<( #y3����������+E3�~������`<���.����`73�������&%��3�� � * ,5����� � �

;���Va� M���L �p.���+c��NvNL:���( �������3� �i3s���C�!3����"������3��L -ia- -�:��"�d >�dpC�":��.(��<T.����(�# -+%���Z30�.�"(��<T �����3������

int x;� $%�'&,�<a[�<� #�3����%a� ��:��%��+2:��.(��<T.����(������� ��N

x�. -+g -:;3����d �3���` +G3����� -���X(.:;�� M3������y�

^_� `�����30�� -+G3 #na- ����� �p.���+B&V��30� +E3� �3���`D+E3����� ����D(�:;�� �30����� ��0� -~&c >�*+ �q�>=>!.H �/#I����� ,5*P���q�hB #w3��. �3 ��+ #T.����(d&V�~3��Z � �<��� ��N 3����" ����.�0���.�0�L �3��B3k�*�C�-�

2.4.10 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6/F���'&x30�.� +E�*��3� Mu� -��(Z+E���d -��30��`�+,��Nif�����

else� #

for� #

while� #. -��(

do�_+E3� �3��<������3�+�z

�$g�:��.(��<�0+E3� -��( 30�.�d`�����`��7�.30+ p.���`�/ # +0����<`<3�������# ��3��<�� �3�������#v(���`�L M�� �3���a[� ������������# +0`����C��#g -��(+E3����� -��� (�:;�� �3������0z

8.g�:��.(��<�0+E3� -��( 3����X`�����`��<��3 ��NC ������;T ����30� ��*���d ��.( pC�V �&c ����c��N 3����X(.���6`�:��3k�D��Ni(��<3���`73������+0:�` � ��*���.+>z

?5g�:��.(��<�0+E3� -��(�3���� `�����`��<��3�:. -y� ��:.�~a� -�����`��"��N�NL����� #;&V�������� #F -��(�(���� +E3� �3���������3�+>zI$g6/F���'&x30�.� +E�*��3� Mu� -��(Z+E���d -��30��`�+,��N

continue� ��.(

break� +E3� �3���������3�+>z

P.g6/F���'&Y M3%��� -+E3cNL��:;�%`<�0��3��<���� 30�"rs:�(.���R3���� `��*(�� �*:. -���3k�d��N ��3��<�� M3������+E3� �3��<������3�+�z

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)gd`�����`�/= d���~a[���=+0���6� ��!���������� -� e �+ (��<T.����( pC����'&bg%NL���"+E�F��3� -`<30��`> -v`����E����`<3�����+E+! -��(�C������3c��:;3c�i��+0+0��p.��R�<�0�0����+>z

ek} �$g��0�> -( -��( :���(��<��+E3� ��.( ����a[���=+0���6�.�� ���������� -�� -��( �7u*� � -��� &%�. �3!�. ����C�<�.+ (�:;���������30+c� u;��`�:;3������+z

ek} 8.g�T.��(2e �C��3�����3��L - gg����T.����3��B��*���.+,���Z ����a[���Z+E���6�.��V���������� -�Rzek}R?5g�T.��( 30�.�"�d �3�`�������� (���`�L ��� �3������NL���B ����a[��� ��(�����3��~T �7� z

Page 91: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� q;�

ek}"I$gd(��<30�<���������B(���`�L M�� �3���a[�B���<�������Z -��(Z+E`����C�!��N� D���~a[���Z(���`�L M�� �3������0zek} P.g��0��NL�����D:.� �3�� 6���~a[���

for� #

while� #C���

do�_+E3� �3��<������3B� �*:���a- -�����3����:.+E�����d -��� ��Nv3����

��3����<�c3k&,� +E3� �3���������3�+>zek}"o$gd`<���6� M���X3����B`���(�� �*:. -���3k� ��Nn3k&,� ����a[�<� ��30�<�� �3������6+E3� �30��������30+ -��(�� ��`�/ 3����B���.�V30� M3

��+,������NL�<�� �p.��Xe ��N -��� ghzek} #.gd(���+E������+0���6� ��V�.�0������ -��+ NL���V���~a[����3� -+G/F+��b,�.�V30�<��� ���[8X(+* � (0=>!�@$=h,.8 ����NL�<�0+c3�� !���������� -�|3��. �3 `�����+0��+E3�+ ��Nn �d -���6NL:��.`73������d����&V����`��:;�Z3�� 3��;�����R�C��+0+0�~p ~�d�.�<+E3���(Z`<����30����y+E3� �3���������3�+c ����C�> ���� X �3�:;�� -�~� #*�������3����RNL:��.(. -���<��3� -3k�*�C�<+V -��(����i�<�� �3������.+,(���+0`<:.+E+0��( ���3���� ������`<��(������ +0��`73�������+% M���":�+0�<(n�

2.4.11 Exercises

Exercise 24r !$= =���� � ,5*[*���D5#0�J,�& �>= =>!$=)�f�/# �V�;� (0=>!h@$=�,.8 S>� * !$1�W \ �4,5� B !� �9�V�;�9=>� ��:4*T���[#;@

(0=>!�@=�,.8 !$:4� (0:;�+K�!$=F�V�;��K�!.*[* !$1��/#;@��[#�(0:;�V� ��h, � ? �hS ] �h� � �'B 8 ek}D�)ghek} �$g

�#include <iostraem >

�int main()

�{

�unsinged int x = +1;

�{ std::cin >> x; }

�for (int y = 0u; y < x) {

�std:cout << ++y;

return 0;

}

Exercise 25\ �4,5� ���Y�V�;�X(0=>!�S)* �>8 13�/�V�U�V�;� �h!�B �2S>�>* !$1 � ��� &]�/�X,.#�B��'&)(+*-,.�/#Q1��4,5�i�V�;�

=>� �h:;*P���/#;@ �h!�B �6�h!$8X(0:4�<� �LW ek} �$ghek}"8.g�

unsigned int s = 0;�

do {�

int i = 1;�

if (i % 2 == 1) s *= i;�

} while (++i < 10);

Exercise 26� !$=s�h, � �Fpq,.= �",cS)* � B �h� * ,.=h,5���J!$# �/#R�V�;�uK�!.*[* !$1��/#;@�(0=>!�@$=h,.8 @$�/pw� ���V�bB ��� *-,.=�,5���[p��

=>� @$�J!$# ,.#�BM�/�V�6���h!>(I�?�[# �V�;� KL!$= 8 ��*d�/# � &��wD �$W \ �4,5� �����V�;� !$:;� (0:4�X! KY�V�;�X(0=>!�@=�,.8 �

ek} �$ghek}!I$g�

#include <iostream >�

int main()�

{�

int s = 0;�

{

Page 92: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

q � ������� ����� ���� �9��� �3� � � ���

�int i = 0;

�while (i < 4)

{

++i;

���int f = i + 1;

� �s += f;

���int s = 3;

���i += s;

���}

���unsigned int t = 2;

���std::cout << s + t << "\n";

� �}

��int k = 1;

��return 0;

� �}

Exercise 27r !$#0�h�"B �>= �V�;�i(0=>!�@=�,.8 @$�/pw�>#OS�� * !$1QK�!$= �', � ��! K �V�;� *P�/�>�<�hB��/#�(0:4��#I:48�S��>=)�LW

� � �<�>= 8Y�/# �Y�V�;��pq,5*P:u� �?! KxAsAf,.#�B

i,5�fS��"@$�[# ! K �V�;� { =)�>� { p�� ���<�>=h,5���J!$#0� ! K �V�;�bK�!$=)H

* !!>(0AYS���K�!$=>�2�V�;� �h!$#�B.�����J!$# ��� �>pw,5*d:u,5�<�'BcW \ �4,5��B !�� ���V�;� (0=>!�@=�,.8 !$:4� (0:;�3K�!$= �V�;�>����/#�(0:4�V� � �', ��� �hS � ��� � �hB 8 ek} �$ghek}"8.g�

#include <iostream >�

int main()�

{�

int x;�

std::cin >> x;�

int s = 0;�

for (int i = 0; i < x; ++i) {

s += i;

x += s / 2;���

}� �

std::cout << s << "\n";���

return 0;���

}

Exercise 28�m�/#�B�,5� * �h,5�>� �V��=���� (0=>!�S * �>86�9�[#U�V�;�Y��!�B �9@$�/p���#QS>� * !$1�W ek}"8.g'ek} ?5ghe }!I$g

�#include <iostream >

�int main()

�{

�{ unsigned int x; }

�std::cin << x;

�unsigned int y = x;

�for (unsigned int s = 0; y >= 0; --y)

s += y;

std::cout << "s=" << s << "\n";

Page 93: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����q ��������� � � � � ��� � � ���� q�8

���return 0;

� �}

Exercise 29� !$=�13���J�>�9�[#�(0:;�u#I:N8�S��>=)�3�/� �V�;� !$:4� (0:;�_! K��V�;��(0=�!�@$=�,.8 @$�[p��>#�S�� * !$1�1k�>*/*4B � H

{ # �hB �Rn_���>�+�V�;!.�����/#�(0:4���_!$:;� (0:4�c(4,.�/=)� ,.#�BX,.="@$: ��13��DiDN!$:N=3*P�/�>�+�/����!$8X(+* � �<��W ek}"8.ghe } ?5ghek}"I$g�

#include <iostream >�

int main()�

{�

unsigned int x;�

std::cin >> x;�

int s = 0;�

for (unsigned int y = 1 + x; y > 0; y -= x)

s += y;

std::cout << "s=" << s << "\n";���

return 0;� �

}

Exercise 30� �/K�!$= 86:4* ,5�<� �V�;�F��!LB � S>� * !$1 � � :N�/pw,5* �>#0�V*dDY�[#U!$=�B �>=f�<! �[8X(0=>!$p�� ���V�k=>�h,cBc,cS �/*TH

����D W � �>���>= �"S��F�V�;�b(0=>!�@$=h,.8 � ��!$:;� (0:4�k,5� ,sK�:N# � ���J!$#E! Kf���V�f�/#�(0:;�nW e } �$ghek} P.ghek}"o$g

�unsigned int n;

�std::cin >> n;

�int x = 1;

�if (n > 0) {

�int k = 0;

�bool e = true;

�do {

if (++k == n) e = false;

x *= 2;

���} while (e);

� �}

���std::cout << x;

Exercise 31� �/K�!$= 86:4* ,5�<� �V�;��(0=>!�@$=�,.8 S>�>* !$1 � � :4�[pw,5* ��#0�V*PD �/# !$=�B �>= �<! �/89(0=>!$p��k���V�b=>�h,cB5H

,cS �/*P�/��D ,.#�B ��� �>�J��# �>D`W � � ���>= � S>�Y�V�;�f(0=�!�@$=�,.8 � �R!$:;� (0:4�f,5�6,XK�:N# � ���J!$#O! KF���V�F�[#�(0:;�xW

ek} �$ghek}"P.g'ek}!o$g�

#include <iostream >�

int main()�

{�

int x;�

std::cin >> x;�

int s = 0;�

int i = -10;

do

Page 94: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

q�? ������� ����� ���� �9��� �3� � � ���

for (int j = 1;;)

���if (j++ < i) s += j - 1; else break;

� �while (++i <= x);

���std::cout << s << "\n";

���return 0;

���}

Exercise 32\ = ���<�M, (0=>!�@$=�,.8

fak-1.C�<! ��!$89(0:;�<� �V�;�fKL, � �<!$= � ,5*

n!! K�, @$�[p��>#O�/#�(0:;�

#I:48GS>�>=nW ek} #.g

Exercise 33\ = ���<� , (0=>!�@=�,.8

dec2bin.C�V�4,5�3�/#�(0:4�V� ,6#�,5��:4=�,5* #I:N8�S>��=

n,.#�B2!$:;� (0:;�V�

�V�;�YS>�/#�,.= D B.�[@���V� ! Kn

�/# =>�>p��>=)�L�?!$=�B �>=W �_!$=Y�'& ,.89(+* �>A0KL!$=n==2

�V�;�6!$:4� (0:;�3���01

,.#�BK�!$=

n==11�V�;�Y!$:;� (0:;�3���

1101W ek} #.g

Exercise 34\ = ���<� , (0=>!�@$=�,.8

cross_sum.C�V�4,5� �/#�(0:4�V�b, #�,5��:4=�,5* #I:48GS>�>=

n,.#�B !$:;� (0:4�V�

�V�;�?�h:48 ! KY�V�;��hB �����/8�,5* B.� @$���V�G! KnW � !$= �'& ,.89(+* �>AmK�!$=

n==10�V�;��!$:;� (0:;� ���

1,.#�B

K�!$=n==112

�V�;�Y!$:;� (0:;�����4W ek}"#.g

Exercise 35\ = ���<� ,X(0=>!h@$=�,.8

perfect.C�<!6�<� �>��13�;� �V�;��=Y,�@$�/p���# #�,5��:4=h,5* #I:48GS>�>=

n���

(I�>=VKL��� �JW � #I:48GS>�>=n � � ���F�',5*/* �hB �C�<��NL�<`<3 � K ,.#�BG!$#0*dD6� K ��� ��� � � :u,5* �<!Y�V�;�9��:N8 ! K �/�V�

(0=>!>(I��=�B.�[p����!$=)�hA �V�4,5������An =∑

k���

, s.t. k<n ∧ k|n kW � !$= �'& ,.89(+* �>A

28 = 1 + 2 + 4 + 7 + 14����(I�>=VKL��� ��A313����* �12 < 1 + 2 + 3 + 4 + 6

�/�9# !.�JW^ &5�<�>#�BC�V�;� (0=>!�@$=h,.8 �<! { #�B ,5*/*�(I��=VK����>�X#I:48GS>�>=)�MS>�>��1k�h�>#

1,.#�B

nW j !$1 8G,.#ID

(I�>=VKL��� � #I:N8�S��>=)�Y�'&.���>�3�/#U�V�;�X=�,.#;@c�[1, 50000]

� ek}"#.g

Page 95: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� q[I

2.5 Floating point numbers�������i���h� ���J!$#CB.���L�>:;�>�L� �s�V�;� � !�,5���[#;@9(;!$�/#0��#I:48�S��>=X��D (I�>�

float,.#�B

doubleKL!$= =>�J(0=>�>���>#0���/#;@9=>�',5*`#I:N8�S��>=)�LW ��!$: 13�/*/* * �h,.= #M,cS>!$:4� � !�,5���[#;@ (I!$�[#0��#I:48�S��>=��Dq�>�<�>86�s�/#M@c�># ��=�,5*PA�,.#�B ,cS>!$:4���V�;� � ^3^3^ �>�J,.#�Bc,.=�B � ��� �V�4,5��B � ���>= � S>� �f��1b!�"(;���>� { � � !L,5���/#;@](I!$�/#0��#I:48�S��>=���Dq�>�<�>86�LW � !$: 13�/*/* ,5*P��!Q:N#�B �>=)�>�J,.#�B �V�;�*d�/8Y���J,5���J!$#0�G! K � !�,5���[#;@?(I!$�/#0� #I:48�S��>=)��AF,.#�BMD`!$:C1���*/* @c�>�9�V��=����?@$:N�"B � *d�/# � ��<!G,.p�!$�"B2��!$868�!$#2(0��� K ,5*/*P�i�/#Q�h!$8X(0:4���/#;@?1��/�V� � !L,5���/#;@9(I!$�/#0� #I:N8�S��>=)�LW

���.�<� `�����a[�<�E3������=(��������<��+d5 ���+0��:�+ ����3�� � -�;������������3 &%��3�� 30�.�d���������� -�fahrenheit.C��� {*��`<3������ �*� � #,&,� �d �/[������+E3� �/[�<+�� ;��� � u� -�6�.�� #

28(������0����+�5,���+0��:�+� ����

82.4(����������<+

� -�;������������3 #;p.:;3V����382 -+X��:�3E� :;3cp*�

fahrenheit.C� b,���"���> �+0��� NL���V3�����+c����+E3� M/[� ��+X3��. �3

3����,����30�����<� (���aF��+0����� ���6�.��'�[��( ���D30�.� ���������� �� +0���6�.�� �E`�:;3�+ ��h �R30�.�,N��� �`<3������. -*� ��E3>�����. �3&,�!�����<( ��+% 3s���C�"30� M3B -���M&%+c:�+c3�� ���<�����<+0����3B -��(Z`����6�.:;3�� &%��3�� N��� -`<3������ � ��:.� pC�<�0+X��~/[�82.4

� ;���g3�����+ #�5cW"W �����'aF��(���+ 3k&,� � !�,5���/#;@k(I!$�/#0��#I:48�S��>= 3k�*�C�<+

float -��(

double� ^_��(�����(�#

��N &,� +E���6�.������7� � -`�� 3���� (.�<`�L ��� M3������int celsius

���fahrenheit.C

p*�float celsius

#3����R����+0:��3����.� ���������� -�\��:;30�.:;3�+

82.4NL���% -�Z�����.:;3,a� ��:��"��N

28�

2.5.1 The types float and doubleb,�.� 3k���C��+

float ��.(

double ��0� NL:.��(. -������3� -y3k�*�C��+X�.�0�Ma*��(���( p*� 5cW"W �V���.����"3���� NL:�� �

(. -������3� -F3k�*�C�<+int

-��(unsigned int

����%���� -��3 3�� ���<������+0�<��3g30�.� �E�d �3������d �30��`> -[3k�*�C��+ �� -��( � # ���<+E�C��`<30��a[���� #y3���� ���[ �2��N2pC��3��

float -��(

double��+R3�� ���7�.�0��+0����3!3���� +E�<3��O��N

���> �g�*:�� pC�<��+<�Z{*����`�� 3����<���d ���� � :�`�� ������� �0�> -g��:��DpC�7��+!3��. -� ����3������<�0+ #�3�����+ ���[ �j+0�<����+�<a[��� �������� -� p.��3�����:�+9e -��( ���+0+ ���� -���+E30��`)g 3��. -� 30�E�F����� 3�� ���<������+E����3 � # +� �� #v&V�~3�� �T ����30�a- -�:�� �� -������� c�<a[�<�03��������+0+ #i3����!3k&,��3k�*�C�<+

float -��(

double M��� a[�<�0� :�+0�<NL:.v��� ���� �`<3���`> �

����.���`> M3�������+�� fj -�:���+ ��N%3�����+E� 3k�*�C�<+ ��0��`> -����( � !�,5���/#;@�(I!$�/#0�X#I:48�S��>=)� #g&%���<���double:�+0:. -��� ����'&V+ ���������<�ke_�. -������ # B !$:uS)* � g ������`���+0��������� ���<�����<+0����30����� ���> -y��:.� pC�<�0+��

�g��NL�����%&,�cNL�����d -��� ����30���*(�:�`��"!.�[ �3������B�C������3j��:��DpC�7��+ #���<32:�+g(���+0`�:�+0+23����B5cW"WU -+G�C��`<3�+<�AB� 3���� 3k�*�C�<+

float ��.(

double#�&,� �. �a[�,30�.� +0 -���, �����30�.���73���` #'����L M3������. - #� -��( �+0+0������������3

���C�<�� �3�����+% -+%��� ����3������� �n3k�*�i��+ #�&V��3�� 3����!+� -���" -+0+E�*`��L M3���aF�~3�����+c -��(�������`<��(�����`���+��Xbc��� �������7uF`��<��3������ ��+R30� M3"3����D���*(�:��:�+V���C�<�� �3�����+

% -��(

%= ���� >a- -��� �p.�� NL��� ����3������� � 3s���C��+"���.~�[�

b,�.��+��d �/[��+6+0�<�.+E� #%+0���.`<� (���a*��+0����� �'a[�<�float

-��(double

��+����> -��3 3�� ���*(���c3����Z30��:��(���aF��+0������Ma[�<���Y&V����`��Z�. -+c��� �����d �����(.�7�>�mn�~/[�D����3������� - 3k�*�C��+ #n3���� !.�[ �3��������C������3R�*:�� pC�<�B3k�*�C�<+! ��0� ,.= �/�V��82� ���"�6��D)(I� � # -��( 30�.��+

`����6�.��<30��+ 3����"���+E3,��N NL:���( �������3� �y �����3������<30��`%3k�*�C�<+X���Z5XW W �

Literals of type float and double.my��3��<�� ��+ ��N 3k�*�C�<+

float -��(

double ����c�������,`����6�.���`> M3���(

3��. -� ��~3��<�� -�+ ��NF3k�*�i�int

���unsigned int

�� ;���v�7u; -�6�.�� #1.23e-7

��+v Xa- -���(double

���3��<�� - #���<�����<+0����30�����!3����%a- -�:��

1.23 � 10−7 �2my��3��<�� ��+j��N 3s���C� float ��*��/ 3����%+0 -���V -+j���3��7�� -�+ ��Ni3k�*�C�double

#;NL�����'&,��(p*�3����"��7303��<�f���

F�

Page 96: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

q�P ������� ����� ���� �9��� �3� � � ���

^_�=��30+B����+E3R�������<�� -vNL���0� #C double

��~3��<�� - `�����+0��+E30+ ��Nj -� �/#0�<�"@��>=X(;,.=)� #yNL�����M&,��( p*� K�=h, � ���J!$#�,5*4(;,.=)� e_+E3� M�03������ &V��30�3���� B ���>�[8�,5*4(I!$�[#0�

.g�#� -��(� -� �'& (I!$# �>#0���",5*;(;,.=)� e_+E3� ��E3������

&V�~3�� 3���� ��<3030�<�e���

Eg7�jb,�.� ���30�<�� -

1.23e-7� �+% -�C��N�3�����+0�R� ��03�+��

�g��3�� 30�.� ����3������7��� M�03 -+�&,���B �+d30�.� N��� �`<3������. -%� ��E3 e -N�3��<��30�.� (���`����d -X�C������3'g M���+0� ��:�����`���+R��N (.������3�+%N��0���

030�

9# &%���<��� !$# � ��Nv3������ �d ��pC� ���6��3k� # ��~/[� ���

.1e ���> -�������

0.1g! -��( ���

1.e_���> -�������

1.0g7� b,�.��� uF�C��������3��L -g� ��E3 e -N�3��7�D30�.����<303��<�

e���

Eg!��+ -�+E�

+0� ��:�����`��d��Nc(������~3�+ #�������`<��(���( p�� -� ���.30�����. -+���

-�M^ ���V�;�>= 3�����N��� -`<3������ �j� ��03 !$= 3����

�7u*�C��������3��� -i� ��03X�d >��pi�"������3E3���(y� bc��:�+ #123e-9

-��(1.23

���� a� ����(double

���30�<�� -�+ #�p.:;3123

��+c����3 #;�������0(.�7�%3�� �a[����(Z`�����NL:�+0������&%��3��int

���3��<�� -�+��bc���Va- -�:��B��Ny3����V���3��7�� - ��+ ��p�3� -������(�p*�6+0`> -����.� 30�.�BN��� -`<3������. - (���`����d -�a- -�:��B(��<T.�.�<(p��

3���� ����3������<�B� ��03 ��.( 3���� N��� -`73������. - � ��E3Bp*�10e # &%���<��� e

��+V3���� e_+0�����.�<(4gc(.�<`����d - ����3��<���<����3����"�7u*�C��������30�L -C� ��03ke_(��<T.����( -+

1#���N 30�.� �7u*�C��������3��� -i� ��03X��+X����+0+0�����5g7�

b�� +E�.�'& !.�[ �3������ �C������3,�*:�� pC�<��+,��� �`<3�������#F��73X:�+,&%���~3�� ���������� -�O3��. �3 �E`����6�.:�30��+ �D NL:���� � !.��(�����( �0�> -n�*:��Dpi�<� #F�. -����~�63����!1 :���<�X`�����+E3� -��3

∞∑

i=0

1

i!= 2.71828 . . .

x2��:6�d �� ����`> -�.3��. �323�����+2+0:�� `�����a[�<������+�*:���`�/F�� #�+0�!&,�X+0����:��(� -��0�> -(;�D���<3 ���*�*(6 ����.�0�'u ����d �30������NL���X30�.�"1 :.��<�c`�����+E3� -��3X&%�.�<� &,� +0:�� :;��30�.�RT���+E3"�>]D30�<����+ #F+0 >�[�jKv�������� -�Hq (�����+�7u; -`<3���d3�����+<�

�// Program: euler.C

�// approximate Euler’s constant e

�#include <iostream >

�int main ()

�{

// values for term i, initialized for i = 0

float ifac = 1.0f; // i!

���float e = 1.0f; // i-th approximation of e

� �

���std::cout << "Approximating the Euler constant ...\n";

���// steps 1,...,n

���for ( unsigned int i = 1; i < 10; ++i) {

���e += 1.0f / ( ifac *= i);

���std::cout << "Value after term " << i << ": " << e << "\n";

� �}

��

��return 0;

� �}

Program 9:(0=>!�@.� �_��:;* �>=W r

Page 97: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� q[o

���.�<�Z�[��:���:���3����R�.�0������ -� #F��30+X��:;30�.:;3c�d >�d��*��/d���/[�B3�����+<�

Approximating the Euler constant ...

Value after term 1: 2

Value after term 2: 2.5

Value after term 3: 2.66667

Value after term 4: 2.70833

Value after term 5: 2.71667

Value after term 6: 2.71806

Value after term 7: 2.71825

Value after term 8: 2.71828

Value after term 9: 2.71828

^ 3c+0������+ 3��. �3 &,�R(��D���<3c ���*�*( ��������>u;���d �30�����6��Ny3����R12:���<�c`�����+E3� -��3 3��. �3 &c ��[�v���. �3�����d �����+�3��BpC� �7u*� � -������( ��+v���M&z3����c��� u;��( �7u*������+0+0����� ���D������B�'oV��+v(��> -~3 &V��30� 30� M3 `�����3� �����+���C�<�� -��(.+c��N 3k���C��+

unsigned int -��(

float�2�=�y@�y(�� 30�.��+c��� 3����!���7u*3%+E��`<3������y�

2.5.2 Mixed expressions, conversions, and promotionsb,�.� !.�[ �3������ �C������3X��:��DpC�7�c3k���C��+V M���"(��<T.����(Z3��DpC� �������R�������<�� -y3��. -�Z ���� ����3��<���� -i3k�*�C�-�b,�*:�+ #F���d���~uF��(d`����6�C��+0�~3��X� uF������+0+E������+ #;����30������ - ���C�<�� -��(�+ ���<3 `<����a[�<�030��( 3�� 3����V���<+E�C��`<30��a[�!.�[ �3�������C������3!�*:�� pC�<�!3k���C��� b,��� ����+0:��30������a� ��:��6��+!3����6���7�.�0��+0����3� �p.�� a- -�:�� # �',.=>� �>� 3��3���������������. -ga- -�:���� ^_�z� ��E3���`�:�L �� #2��NX3���������������. - ����3������7� a- -�:��d��+D��� 3����da� ��:���� ��.�����N3����!���<��<a- -��3�! �[ M3������ �C������3X�*:��Dpi�<�%3k�*�i� # 3���� a� -�:.�"�����d -����+,:���` �. -������(y�X^_N 3����<��� M���"3k&,����> ����<+E3Xa- -�:���+ #.�~3%��+,���6�.��<������3� M3������ � (��<T.����( &%�.��` � �����"��+c`�����+0���y�bc����+,���d� ��03���`�:�L �� � uF�.L -����+ &%���63����R`��. -����� ��N

int celsius3��

float celsius���3����

���������� -�fahrenheit.C

��> -(�+,3�� 30�.� pC���. �aF�����,&,� &c -��3 �2(�:;������� �7a� -�: M3���������Nn3����!�7u*������+��+0�����

9 * celsius / 5 + 32#; -�i����3������� - ���C�7�� -��(�+, ����B�<a[����3�:. -��� `�����a[�7�03���(3��

float#F+0�

3��. �3,3���� `����6�.:�3� �3�������3� �/[�<+X�.L -`��R�7uF`��:�+0��a[�<���Ma[�<�X3���� 3k���C�float

�^_�!3���� �.�0������ -�

euler.C#�&,�2�. �a[�23����2+� -���v/F���.("��N*`�����a[�<��+0����� �n��� 3����j���~uF��( �7uF������+E+0�����

ifac *= i# 3����

unsigned int���C�<�� ��.(

i���<3�+B`<����a[�<�030��( 3��630�.�"3s���C�

float��Nv3���� ��3����<�

���C�<�� -��(ifac

�bc��� 3k�*�C�

double��+ (��<T.����("30�XpC� ������� �������<�� �[30� ��"3����v3k�*�C�

float� b,�*:�+ #- `����6�C��+0��30�

�7u*�.�0��+0+0����� ����a[���a*����� ���C�<�� -��(�+��N"3k�*�C�<+float

-��(double

��+ ��N 3s���C�double

�t�������+0:�`�� -� �7u*�.�0��+0+0�����=���<3�+!�7a� -�: M3���(�#� ���� ���C�<�� -��( ��Nj3s���C�

float��+ (0=>!$8�!.�<�hB 3��

double�

Kv��������3������R��+n 3��<���):�+0��(!30�%(�������3�� `��<�03� -���"�����~aF����<����("`<����a[�<��+E������+ ��� &V����`��!���X����NL�����d �3���������<3�+2���+E3��v^_� � ��03���`�:�L �� #�3����,a� ��:��,�� -�����X��N

double�D:.+G3j`<����3� -���D3����,a� ��:��c�� ��.���c��N

float�

^_� +0:����d ��0� #v3����������7�� ���`���� ��NB M����3������<3���`63s���C��+ N������ 3������> -+G3 �������<�� -c30�=3���������+E3�������<�� �y3k���C�!��+

bool � int � unsigned int � float � double�

� � -��0�> -(;� /*���M& 30� M3 Z`�����a[�7��+0����� �d �� -�+0� ��� N������e3������������ ���<�.�7�� - 3��Z3�������<+0+�������<�� �y3k���C� #�+0��� {*��`<3������ �*� �*�9#F�2b,����+X�. ����C�<�.+,NL���%�7u� -�6�.��B����3����"(���`<L ��� �30����� +G3� �3������<��3

int i = -1.6f;

Page 98: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

q�# ������� ����� ���� �9��� �3� � � ���

������� 3�����a- -�:�����N% �!.�[ �30�����Z�C������3 �*:��Dpi�<� 3k�*�C�d��+ `<����a[�<�030��( 3�� -� ����30������ -g3k���C� #v3����N��� -`73������. -F� ��03j��+ (���+0`> ��0(.�<(n� ^_N.3����X���<+0:��3������Ba� ��:��X��+2���D3����ca- -�:��,�� -�����,��N 3����c3� ������<3 3k�*�C��#&,� ���<3B3�����+Va- -�:�� #C��3����<�E&V��+0� 30�.� `<����a[�<��+E�����=��+B:���(��<T.����(y�!^_� 3���� �.�0�<aF����:�+R�7u; -�6�.�� # 30�.��+��:��� ������3��L ��� � ��+ i &V�~3�� −1

e -��( # !.� &V��3��3����"���> M����+E3c���<������+E����3� Mp �� a- -�:��−2

g7����.�<�

doublea- -�:���+B M��� `�����a[�<�03���( 3��

float# &,� -�[ -���Z���<3V3���� ���> ��0��+E3V���7�.�0��+0����3� �p.��

a- -�:��ie &V�~3���3�����+ p�����/[��� ��� -� ���6� ���������3� �3������ � (��<�i����(.�<��3 &c �� g�# :N#0* �>�>� 3����R�����������. -�a- -�:����+2L ������7�j���j+0�d -���<�v3��. -� -���

floata� -�:.�-� ^_� 3�����+ L �3030�<�2`> -+0� #[3����%`<����a[�<��+E�����6��+2:��.(��<T.����(y�

2.5.3 Explicit conversions

5 ����a[�<��+E������+%pC�<3k&,����� ����3������� - -��( !.�[ �3������ �i������3%�*:��Dpi�<�%3k�*�i��+B ����!`����������Z���Z���� -`73���`���� ;��� �7u� -�6�.���# 3���� `�����a[�<�0+0�����=��Nj ������.�����[ M3���a[�

floata- -�:��

x3��d3���� 3k���C�

unsigned int`����0�0��+E�C����(�+g3�� 3����%&,�<���_/*���M&%� � !!$= Kh:4# � ���"!$#��x � 3��. �3j����:��.(�+ (��'&V�63�� 30�.�%�.� uF3 ����3������<���5 ����a[�<��+E���� #i��3V`> -� �d �/[� +0�<�.+E� 3����C�<��NL����� -� ����3��<���� -�`<���6� :;3� M3��������'a[�<�" !.�[ �3����.�D�C������3

�*:�� pC�<�,3k�*�C��#.��N 3�����+,L �3E3��<�,3k�*�C� �. -+V L ��0���<�Xa- -�:��R�� -�������1vu*�.���`���3g`�����a[�7��+0����� -���'&V+23�� `�����a[�<�03X !a� ��:��V��Nn -���d M����3������<3���`c3k�*�i�B(.�~����`<3�~� ����3�� -���

��3����<�g �����30�.���73���`g3k�*�i� #�&%��3�����:;32(.�7T �������" -�6�7u*30�� Ba� M���L �p.��,���/[�int i = -1.6f;

b��"��p.3� -���3����

inta- -�:�� ����+E:.~3�������N������ 3����

floata� -�:.�

−1.6#i&,� `> -� +0���6�.��&%�0��3��!3���� �7u*�.�0��+0+0�����

int(-1.6f)�

bc���"�������<�� -y+E�*��3� Mu ��Nv ��Z�7uF�.���`���3,`�����a[�<��+0������#. -�+E� `> �����(� �',5�>� # ��+

� e �����bg

&V���<�0� � ��+! �3k�*�C��# -��( ��� �d��+! �� �7uF�����<+0+0�����y�6b,���D�0��+0:��3������`> -+E3!�7uF�����<+0+0����� ��+ a- -���( ��N -��( ������ ��N 3����6`<���0����+E�i���.(������ `�����a[�<��+0����� ��N ��� � 3��Z3����63k�*�C� � e_ -+ ���

T x =�����g"��+

(��<T.����(y� ;��� `��<�03� -��� �E`����6�.���`> �3���( �B3k�*�C�X�. -����+ � #[��3g��+j����`<��+0+� ��E�63��"� ��0����3�����+E� � � �#����/[�X��� 3����

`> -+G3%�7u*������+0+0�����(unsigned int)(1.6f)

2.5.4 Holes in the value range

;��� ����30������ -g3k���C��+ # 3����d �����30�.���73���`D���C�<�� �30������+ �d �� N -��j3�� `����6�.:�30�6`����0���<`<3 ����+0:��3�+ ������(�:��3�� �'a[�<� �!��� :���(��<� !.�M&!� b,�.��+ ��+ pC�<`> -:�+0�d3����a- -�:����� -�������N%�> -`��4����3������� - 3k�*�C���+D ��!$#0��� @$: !$:4� +0:;p +E�<3%��N � #;&V��30� ��� �E������<+ � ���pC�<3k&,�����y�

;��� !.�[ �3����.� �C������3n�*:�� pC�<�y3k�*�C��+ #�3�����+n��+y����3 30�0:.���n&%��3��RT ����30�3e_ -��( �<a[��� &%��3�� `���:���3� �p.�� ga- -�:�� �� -����� #;��3X��+,���6�C��+0+0�~p ��%3�� �0�<������+0����3B +0:;p.+0�<3X��N �Y&V��30� �������B3��. -�����.� ����<������3 p.:;3�����������+��B^ 3%3�:;����+V��:;3V3��. �3V3�����+E� �.�����+B ����"3���� �d -rG���c������p.���� ��� ! �[ M3������ �C������3V��:��DpC�7� ����~3������<3���` #'&V������ �Ma[�7� �n���2:.��(��<� !.�'&V+ ��0� ���+0+ ��N. -� ��+0+0:�� � 30�.� ���7�.�0��+0����3� �p.�� a- -�:���+ :�+0:. -���+E� -� -� �<�.���0����:.+c����3��<�0a- - #��D:.`��Z� ������<�X3��. -�ZNL���B����3������� �y3k���C��+��c^_N��[��:Z��������3%3����"L �������+G3double

a- -�:�� �����[��:;�X�.L M3�NL�����OaF�L 3���� �7uF�����<+0+0�����

std:: numeric_limits <double >::max()

Page 99: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� q�q

�[��:=��������3BNL���"�7u� ��6� �� ���<3R3���� ��:;30�.:;31.79769e+308

� �X��`> �� 3��. �3R3�����+B���> -��+1.79769 �

10308 #. �����<3E3s�L M�����"��:��DpC�7�>�mn�73B:�+B ��������[ -`��Z3����!��+E+0:�� ��Nv�������+X&%��3�� Da[�<�0�Z+E���6�.��B�.�0������ -� 30� M3B -+E/*+%3����!:�+0�7�V3��

���;�.:;3�3k&,� !.�[ �3������X�i������3��*:��Dpi�<��+ ,.#�B 3������~� (���hi�7������`���� b,��� �.�0������ -� 30�.�<�D`�����`�/F+v&%�.�73����<�3�����+,��+c����(�����(�3���� `����0���<`<3V(���h �<������`����jKv�������� -���>]D�i�<��NL������+ 3�����+,3� -+E/ �

�// Program: diff.C

�// Check subtraction of two floating point numbers

�#include <iostream >

�int main()

�{

// Input

float n1;

���std::cout << "First number =? ";

� �std::cin >> n1;

���

���float n2;

���std::cout << "Second number =? ";

���std::cin >> n2;

���

� �float d;

��std::cout << "Their difference =? ";

��std::cin >> d;

� �

� �// Computation and output

� �std::cout << "Real difference - input difference = "

� �<< n1 - n2 - d << ".\n";

� �return 0;

� �}

Program 10:(0=>!�@.� � B.� �sW r

$%�<���c��+ -� �7u� ��6� ��g��:�� +0���'&V�����B3��. �3 3����c -:;3�������+ ����c �p.�� 3��R`����E����`<3�~� +0:;p.3E�� -`<31N������

1.5�

First number =? 1.5

Second number =? 1.0

Their difference =? 0.5

Real difference - input difference = 0.�g:;3X30�.�" -:;3�������+c`> -� M�.� ��0����3�~� # !.� `����0�0��`<3���+0:;p�30�� �`<3

1N������

1.1�

First number =? 1.1

Second number =? 1.0

Their difference =? 0.1

Real difference - input difference = 2.23517e-08.

Page 100: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>]�] ������� ����� ���� �9��� �3� � � ���

���. �3c��+,��������� �������<���'� SVN�3��7�X(���:;p.��B`�����`�/F����� ��:;�c������3� -i M����3������<3���` #�&,�R�D:�+E3,`�����`��:�(��3��. �3 ��3 y@+ 3���� �h!$8X(0:;�<��= -��( ����36:�+ &%��� `> -������36`����E����`<3�~�4+0:;p�30�� -`73>��^ 3 3�:;����+6��:;3 30� M33���� 3k�*�C�

float:�+0��( ���

diff.C�. -+B������<+R �3

1.1 -��(

0.1��� ��:;�B� � �3�NL����� # ���> -������� 3��. �3

3�����+0�Va- -�:���+ ����B����3 �7u; -`<3���D���<�����<+0����3� �p.��R -+!.�[ �3����.�"�C������3g�*:�� pC�<��+�� b,���<����NL���0� #F��3 ��+ ����3+0:;�0������+E�����V3��. �3v3����,�7uF������+E+0�����

n1 - n2 - d(��*�<+2����3v���73�:;���

0��� ��:;�2+0��`�����( � u� -�6�.��g�0:.�y�

2.5.5 Floating point number systemsS { #I���<� � !�,5���[#;@X(;!$�/#0��#I:N8�S��>= ��Dq�>�<�>8 ��+c T.�.�~3��B+0:;p.+0�<3X��N ��#.(��<T.����(p*�NL��:;�%��:.� pC�<�0+2 � β � � e 30�.� S�,5��� g�#

1 � p � � e 3���� (0=>���>�/���J!$# g�#e ����� � � e 30�.� ��8G,5*/* � �>�X� &)(I!$# �>#0� g

-��(e ����� � � e 3���� *-,.=J@c�>�>�s�'&)(I!$# ��#0� g7�bc��� +E�<3 �

(β, p, e ����� , e ����� ) ��N��0�> -���:��DpC�7��+X���7�.�0��+0����3���( p*� 3�����+X+G�F+E3��<� `�����+0��+E30+%��N -��*:�� pC�<��+,��N�30�.� NL�����

s �

p−1∑

i=0

diβ−i

� βe,

&V���<�0�s � {−1, 1}

#di � {0, . . . , β − 1}

NL���% -�i#. -��(

e � {e ����� , . . . , e ����� } �bc��� �*:�� pC�<�s��+c3���� ��� @$# #F3����"+E� �*:�����`��

d0d1 . . . dp−1

��+,`> �����(d3���� �h�[@$#I� { �h,.#�B � � #� -��(3���� �*:��Dpi�<�

e��+,3���� �'&)(I!$# �>#0� �

� � 3s���.��`> -�~�6&%���~3�� �!.�[ �3����.� �C������3c�*:�� pC�<�c��� 30�.� NL������d0.d1 . . . dp−1 � βe.

;���%� u� -�6�.�� #*:.+E�����Dp -+0�β = 10

#0.1

`> �� pC�R&%���~303���� -+1.0 � 10−1 #� -��( -+ 0.1 � 100 # ��.( ���

�d -���d��3����<�X&c ��*+��bc���c���<������+0�<��3� �30�����6��NC �*:��Dpi�<�jpi��`�������+2:��.���*:��c&%����� &,�X�0��+E30����`<3g��:;��+E���a[��+g30�"3����%+E�<3

�(β, p, e ����� , e ����� ) ��N # !$= 8G,5*P���q�hB �*:�� pC�<��+ #*�_� ���*3����R������+ &V��3��

d0

�= 0

��b,��� (��'&V��+0��(��B��N3�����+ ��+ 30� M3 3����Va� -�:.�

0�. -+ ���D�.���0�d -�� � �<( ���<������+E����3� M3������ � �������R�������<�� -�~� #*�������d -�� � �3������

���+0�<+X�7u; -`<3�~�30�.� �*:�� pC�<��+,��Nv Mp +E���:;3��Ba� -�:.� +0�d -���<� 3��. -�βe �� � e +0���" -�+0� 1vuF�<��`���+E�!?[].g7�

;���B T;u;��( �7u*�C��������3e#F3����"+0�d -���<+E3 �C��+0�~3���a[�R�������d -�� � ��(d�*:��Dpi�<�c��+

1.0 . . . 0 � βe = βe,

&V������V3����"L M������+E3X�����"��+

(β − 1).(β − 1) . . . (β − 1) � βe =

�1 −

�1

β � p � βe+1 < βe+1.

b,�.��+X���> ��.+ 3��. �3,3���� �������d -�� � ��(d�*:��Dpi�<��+X ������E+0���03���( p*��7uF�i���.�<��3��;�����+E3 !.�[ �3����.�D�C������3%��:.� pC�<�%+E�F+G3�����+%:�+0�<( ���Z���� �`<3���`��! ���� S>�/#�,.= D # ���> -������� 3��. �3%30�.�7�

�. �a[�jp -+0�β = 2

�v^_� +0:�`�� c+G�F+E3��<� #M3����j(.�<`����d -���:��DpC�7��+1.1 -��(

0.1 ����2����3 ���7�.�0��+0����3� �p.�� #

-+,&,� &%���C+0�<�!���7uF3��� �6�� �('�@�� �����& ���$(��'�� �*�� � � ��� /1-�+ �� 2 2�-

Page 101: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �>];�

Computing the floating point representation.^_� ���0(.�7�c30� `�����a[�<�E3% ���~a[����i��+0��3���a[� � � (.�<`����d -

�*:�� pC�<�x����3�� �������d -�� � ��( p.���. ��E� !.�[ �3������ �C������3 �*:��Dpi�<� +E�*+E3���� �

(2, p, e � � � , e ����� ) #*&,�T���+E3X`����6�.:;3��R��3�+ S �/#�,.= DM� &)(;,.#0���"!$#

x =

∞∑

i=−∞bi2

i.

b,�.��+j��+2+0������L �� 3�� 3����cp.���. ��E� � uF� -��+0����� ��NC �. �30:��� -��*:��Dpi�<�j -+g(���+0`<:.+E+0��(����6{*��`<3������ �*� �*�9qF�b,�.� ������ (���hi�<�0����`�����+ 3��. �3 &,���. �a[� 30� -���M&\ �� �����[ �3���a[�d�C�'&,�<��+D��N

2# +E����`��

x`> ��zpC�

��0p.��3E�� �����~�Z`����+E�D3��0� � � 3������ (��<3��<�������.� 30�.�D+0�d -����+E3 -��( L �������+G3"a- -�:���+ ��N

i#i -��(

i#

NL���!&%����`��bi

��+"����� � �<�0� e_����3�� 3��. �3i�d �� pC�

−∞ #yp.:;3i��+ T.����3��D+0����`��

x��+RT ����30�)g7�Dbc���

�*:�� pC�<�i − i + 1 � � � {∞}

��+c3���� �*:�� pC�<�c��N ��� @$#I� { �',.#0� B.�[@���V� ��Nx�

����3��di := bi−i

#;&,� ���<3d0

�= 0

-��(

x =

i−i∑

i=0

di2−i

� 2i.

bc����+c���6�.����<+j3��. �3x � �

(2, p, e � � � , e ����� ) ��N� -��(�������d��N i − i < p -��(

e ����� � i � e ����� �^_�Z`����6�.:;3������ 3����Rp ��� M�0�d�7uF� -��+0��������Nx > 0

#;��<3X:�+% �+0+0:����RNL���%+0���6� ���`���3k�D3��. �3x < 2

�b,�.��+j��+ +0: � `�������3g3�� �7uF�.L ���� 3����c��+0+0:��,&V��30� 3����c(.�<`����d -F��:��DpC�7��+

1.1 -��(

0.1#� ��.(6 -�;��3����<�

`> -+E��+6`> -�4pi� ����(�:�`���( 3�� 3�����+ `� -+0��p��z+0�7� M�� �3���~� (��> ������� &%��3�� 30�.� L ������<+E36�<a[�<������3������7�+0�d -���<� ��� � ��: �j3��

x� &X����3������

x = x � + 2k&V��3��

k � N -��(

x � < 2#�&,� ���<3!3���� p.���. ��E�

�7u*� ��.+E��������Nxp*� `����Dp.��������� 3���� �7uF� -��+0�����.+c��N

x � -��( 2k�

;���x < 2

#F&,�!�. �a[�

x =

0∑

i=−∞bi2

i = b0 +1

2

0∑

i=−∞bi−12

i

︸ ︷︷ ︸=:x �

.

bc����+B��(.�<��3���3k�Z�����'aF��(.�<+R d+E���6�.�� -���������3����\3�� `<���6� :;3��"3���� p.���. ��E�Z�7u*� ��.+E����� ��Nx� ^_N

x � 1#i3���� ����+E3B+E��������T.`> -��3%(�������3

b0

��+1#C��3����<�0&V��+0� ��3R��+

0� b,���D��30�.�7�R(.������3�+

bi

#i � −1

#`> -��+0:;p +E� �*:�����3���pC�"� uF30�� �`<3���(�p�� ���� ~�F����� 3����!+� ����R30��`��.��� ��:�� 3��

x � = 2(x − b0)�

QB�������D3�����+,NL���x = 1.1

�*�����(�+,3����"NL�����M&%����� +0� ��:.�<�.`<� ��N�(�������30+��

1.1 → b0 = 1

2(1.1 − 1) = 2 � 0.1 = 0.2 → b−1 = 0

2(0.2 − 0) = 2 � 0.2 = 0.4 → b−2 = 0

2(0.4 − 0) = 2 � 0.4 = 0.8 → b−3 = 0

2(0.8 − 0) = 2 � 0.8 = 1.6 → b−4 = 1

2(1.6 − 1) = 2 � 0.6 = 1.2 → b−5 = 1

2(1.2 − 1) = 2 � 0.2 = 0.4 → b−6 = 0...

� ��F�����6���$&� % � 8 � �����6��� @��)��'# C �#��"8:A �����D���� 8��#sG

Page 102: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>] � ������� ����� ���� �9��� �3� � � ���

� �2���M& +0��� 3��. �3y3���� p ��� M�0�R�7uF� -��+0�����!��N�30�.�2(���`����d ���*:�� pC�<�1.1��+y�C�<�0���*(���` �i30�.� `����E�����

+E�C����(������Vp.���. ��0�!�*:��Dpi�<� ��+1.00011

#[ -��( �~3v�. -+v���;T.�.�~3����� �d -��� +0��������T.`> ���3 (������~3�+��v{*���.`<�, -��*:�� pC�<��+ ���3���� !.�[ �3������ �C������3,�*:�� pC�<�,+E�*+E3�����+ �

(2, p, e ����� , e ����� ) -��( � (2, p, e ����� , e ����� )�. �a[� �3X����+E3

p+E��������T.`> -��3c(�������30+ #;��3cNL�����'&V+ 3��. �3

x = 1.1��+c����3X�0�<������+0����3� �p.��"��� p ��� M�0�

!.�[ �3������ �C������3c�*:��Dpi�<�c+E�F+E30��� #F�����[ ��0(.���+0+c��Np, e ����� -��( e � ��� �

Relative error.^_N &,�� ����6����3 �p.�� 3�� ���<������+0�<��3D ��:��DpC�7�

x�7u� �`<3��� -+ p.���. ��E� !.�[ �30�����

�C������3 ��:.� pC�<�!��� 3����6+E�*+E3���� � (2, p, e ����� , e ����� ) # ��3!��+ �. �3�:;�� - 3�� ��������>u;���d M3�� �~3!p*� 3����!.�[ �3������ �C������3c�*:��Dpi�<� # �h,.=>� ��� 3��

x� � �. �3X��+,3����"�7�0�����c&,�"�d �/[�R��� 3��. �3X ����.�0�'uF���d �3������ �

{*:;�.�i��+0�"3��. �3x��+ �C��+E��3���a[� -��(Z�. -+,p.���. ��0�d�7u*� ��.+E�����

x =

i∑

i=−∞bi2

i = bi.bi−1 . . . � 2i,&V���<�0�

bi = 1�

bc���<�0�! ��0� 3k&,�D� M3�:;�� - &c ��F+c��N ����.�0�'uF���d �3������x&V��30�

p���X���+0+,+0��������T.`> ���3 (�������30+��2AR���

&c ����+c30� ����:���(�(��'&V��#;����+0:��3����.� ���3����!��:.� pC�<�

x = bi.bi−1 . . . bi−p+1 � 2i.

b,�.��+c30�0:.��`> M3���+X -�i3���� (.������3�+bi, i � i − p

#;+0� 3���� �<�0�����c&,� �d �/[�R��+

x − x =

i−p∑

i=−∞bi2

i �i−p∑

i=−∞2i = 2i−p+1.

SV�3��7���. �3���a[��~� #�&,�!`<��:.�( ����:���(Z:;�Z3�� 3����!��:.� pC�<�

x = x + 2i−p+1,

&V���<�0�"��:;�c�.�0�<aF����:�+c�<�0�����X��+E30���d �3��B+0���'&V+c3��. �3c����(.�<��(�#x � x

�.���(.+<�bc����+j���> -��+ #

x��+jpC�73s&,�<����3s&,�!�*:��Dpi�<��+j30� M3 ����

2i−p+1 �� ��E3 #�+E� 3����%���> ����7� ��Ni3����X3k&,��*:�� pC�<��+2��+j �3 ����+G3

2i−p �&c >� N������ x�gAB�63����%��30�.�7� �. -��(�#

x�. -+g+E� � � ,5�m* �',5�>�

2i #*���> ��.���.�3��. �3

|x − x̂|/x � 2−p,

&V���<�0�x̂��+"30�.� !.�[ �3������d�C������3"�*:�� pC�<�"���> �����+G3 3��

x� �&� b,���6�*:�� pC�<�

2−p #����<NL�<�0����( 3��Z -+3���� 8�, �>���/# �M�J(+���/* !$# #v��+!3���� =>� *-,5���/p��]�>= =>!$= �d -(�� ��� ��������>u;���d M3������

x&V�~3�� ��3�+ ���> ��0��+E3

!.�[ �3������ �C������3c�*:��Dpi�<�x̂�

bc���6�����<a*����:�+ ����� ��: ����3k� -�+0� �����(�+ NL��� �����[ �30��a[�x -��( 3�������� `����E����+E�C����(������ZpC��+G3 �� �

�����>u;���d �30�����x̂#�+0�D3��. �3,&,�!���<3c3���� �������<�� - =>� *-,5���/pw�?�>= =>!$= NL�����D:�L

|x − x̂|

|x|� 2−p, x

�= 0.

��"6�������F�( �'�A C �(��>:�*�#3 ���� ��(� � �='#� �6��@ $&�����D���( "�=3x̂���(� �#�������� �( �� ���# ����5��'�'�� C �68�'������= ���!G

Page 103: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �>]�8

bc����+���> -��+63��. �3d3���� (���+E3� -��`�� ��Nx3��z��30+���> M����+E3 !.�[ �3������ �C������3 ��:��DpC�7�d��+ ��� 3����

&,����+E3 `> -+0�Z�������i���03������. - 3��=30�.��+0� � �Z��N x� bc����+ ��+ pC�<`> -:�+0��3�����!.�[ �30����� �C������36��:��DpC�7��+

���� ����3 � ��:. -��� +E� -`��<(w -������ 30�.����> -c��������45,���+0�30�0#g3������~� (�����+0��3k� ��+ �.����� #2p.:�3D3����

������� &,�D���� �&c �� N������0#y3����D+G� M��+0�<�"3����<� pC��`������-� SV+ +0���6� �� �7u� ��6� �� #C`�����+0��(��<�R3����

�������d -�� � ��(�! �[ M3������B�C������32��:.� pC�<�j+E�*+E3���� F(2, 3, −2, 2)

��b,���%+0�d �����+E3v�i��+0��3���a[�,��:.� pC�<�2��+1.00 � 2−2 = 1/4

#[ -��( 30�.�,L M������+E3 �����,��+1.11 � 22 = 7

e ����`> -�*3��. �3v3����,(�������3�+v M��� p ��� M�0� g7� bc���(���+E30�0��p.:�30�����=��N, -�2�C��+E��3���a[� �*:��Dpi�<��+!�'a[�<� 30�.� ����3��7�0a� �

[1/4, 7]��+!+0���'&V� ��� 3����6NL�����M&%�����

�.��`<3�:;���-�

0 1 2 3 4 5 6 7 8

F�����t30�.��+2�.��`<30:��0� #��~3j��+j`���> ��23��. �3j30�.�,����� �3���a[�c�<�0�����jNL�����D:�L B`> -������3j�����( NL���ga[�<�0� L ��0���x�j���.(����<( #;��Nn3���� ���> �����+G3%��:.� pC�<�

x̂�. -+c -���7uF�C��������3cL ������<�,3��. -�

e � ��� #���3c��+,����3c`�����3� -������(������:;�!.�[ �30����� �C������3j+E�F+E30��� ���g:;3 -�+E�!��Nx��+2a[�<�0� `����+0�%30� � �<��� #�3����X���<L �3���a[�X�<�0�����gNL�����D:.�

�d ��ZN -�� #i�. -������ ��Nx̂�. -+R �� �7u*�C��������3 +0�d ����<�X3��. -�

e � � � �!^_� N -`<3 #i3����<��� ��+R 6+0:;p.+E3� -��3��L -�[ ��dpC�<3k&,���<�0 -��(d3����B+0�d -����+E32�C��+0��3��~a[�%�������d -�� � ��(��*:�� pC�<�>� c:.� pC�<�0+ x

���3��. �3 �[ �� ��������3!����`<��+0+� ��0����= ����.�0�'uF���d �p.��!p��=�������d -�� � ��( !.�[ �3������d�C������3 ��:.� pC�<�0+ &%��3�� �0��L �3��~a[� �<�E����� �3X����+E3

2−p �

2.5.6 The IEEE standard 754

Value range.bc��� 5XW Wt+E3� -��( M��(Z(��*��+X����3%������+0`7����pC� 3����"a- -�:��"�� ��.���"��N 3����"3k�*�i��+

float���double

� ^ 3D���.~� +E3����.:�L �3��<+ 3��. �3 3����da- -�:����� -�������Nfloat

��+D`�����3� -������( ��� 30�.��a- -�:���� -����� ��N

double+0:�` �Z30� M3%

floata� -�:.� `> -� pC� ����������30��(30�6

doublea- -�:����

^_� ���� -`<3���`�� #�����+G3"�.L �30NL������+R+0:;�.�i���03Fe a- ����� -��3�+ ��NJgR3���� � ^3^�^ �>�J,.#�Bc,.=hB � ��� NL��� �0�<� �����+E����3����.�Z -��( `����6�.:�30�����d&%��3�� !.�[ �30������C������3 �*:�� pC�<��+�� �%��(.�7�!3�����+"+E3� -��(. ���(�#y3���� a- -�:���� -����� ��N 3���� 3s���C�

float��+c3���� +0�<3

F(2, 24, −126, 127)

��N ���/#;@$* ��(0=>�h�>�����"!$# �.���0�d -�� � �<( !.�[ �3������!�C������3 ��:.� pC�<�0+ #��.�:�+ +0�����V+G�C��`��L �i�*:�� pC�<��+ e `���� �a[����������3��� #

0��+c���.� ��N 30�.�<+0�!+E�i��`��L -y��:.� pC�<�0+ g7�2bc���Ra� ��:�� �� ��.��� ��N

double��+,3����"+0�73

F(2, 53, −1022, 1023)

��N B !$:uS)* � (0=>�h�>�����"!$# �.���0�d -�� � �<( !.�[ �3������%�C������3 ��:��DpC�7��+ #[ -�[ -��� &V��3�� +E����� +E�C��`<�L -F��:.� pC�<�0+ -(�(���(�#�����`��:�(������

0�

bc����+E�%� ��� -���<30�<��+ �d �� +0�����|+0�����<&V�. �32 M�0p.��30�� ��E�D �3jT���+G3 #�p :;323����<� ����c����3���a- �3���(Dp*� `����������D���������0� � >�[��:;32��� &%����`��

32p.��30+2NL���0� R���������0� `��<�_� ^_��(�����(�#

32p.��3�+2��Ni���������0�

����!:.+E��( 30� ���<������+E����3 +E��������"������`<��+0����� ��:.� pC�<���%b,��� +0��������T.`> -��(��0� �*:������<+ ��8 p.��3�+>z.����`> -�3��. �3���� X�������d ��� � ��( p.���. ��0� !.�[ �3������X�i������3 �*:�� pC�<� +E�F+E30��� #�3����2T.�0+E3v(�������3n��NF3����g+E��������T.`> -��(

Page 104: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>]�? ������� ����� ���� �9��� �3� � � ���

��+, -~&c >�*+1#F������`��R��3 �.�<��(�����3 �7u*�.���`���30�� pi�B+E3�������(y�2b,�.�R�7u*�C��������3 �0� �*:������<+, -����3����<�

8p �~3�+

NL���c���<������+0�<��3������6�~3�+254 = 28 − 2

�i��+0+0��p.��Ba- -�:���+ #. -��( -����3����<�cp.��3c��+,������(���( NL���%30�.� +0�����y� ;���"(���:;p.�� ������`���+0����� �*:��Dpi�<��+ #i3���� +0��������T.`> ��.( ��� �*:�������+"I �6p.��3�+ #i3���� �7u*�C��������3 �. -+D���

p.��3�+BNL���"��3�+2046 = 211 − 2

�i��+0+0��p.�� a- -�:���+ #y ��.( ����� p.��3R��+ �����<(.�<(=NL���R3���� +0�����y� ^_� 3���3� - #3�����+,����a[��+

64p �~3�+��

X��3��R3��. �3c��� pi��3��Z`> -+E��+ #;3k&,� �������R�7u*�C��������3ca� ��:���+X`<��:.�(�pC�" -`�`���������( M3���(6&V�~3�����:�3����`<���� -+0����� 3���� 3���3� -y�*:��Dpi�<�c��N p.��3�+��jb,�.�<+0�!�7u*30�� a� ��:���+V ��0�"��� N -`<3%:.+E��( NL���X�0�<������+0����3������3���� +E�C��`��� -y�*:��Dpi�<��+,������30��������(� MpC�Ma[��#.���.`<�:�(.���.�

0�

Arithmetic operations.bc���!5XW W +E3� -��( M��(�(��*�<+c����3 ������+E`<����pC�B3���� -`�`<:��� -`<�d��N �����3������<30��`

���C�<�� �3�������+D�Ma[�<��30�.� 3s���C��+float

-��(double

# p.:�3 3����Z^ 121j1t+E3� -��(. ���(�o�I-? (�����+�� bc������ ��:�������������3�+B ��0� -+B+E30����`<3R -+V�C��+E+0��p.�� � 3���� ����+E:.~3B��N2 -��� �(.(���30������# +0:;p�30�� �`<3�������# �D:��3����.�� �`> �30������#.���%(���aF��+E��������+c3����"���7�.�0��+0����3� �p.��!a- -�:�� # �',.=>� �>� 3�� 3����"30��:�� a� -�:.�-�,^_N 3����<��� M���"3k&,����> ����<+E3"a- -�:���+fe_���� -�������63��. �3B3����D3E��:�� a- -�:�� ��+R�. -�N�&c �� ��� pC�<3k&,����� 3�������g�# 3���� �����D30� M3�. -+

dp−1 = 0��+R` ����+0�<�n� b,��� +0 -��� ��:���D ����.�����+V3��d3����D`�����a[�<�0+0�����=��Nj(���`����d -na� ��:���+"���/[�

1.13��D3��������cp.���. ��0� !.�[ �3������ �C������3,���<������+0�<��3� �30�����y����������'a[�<� #;`����6� ��0��+0����+j��Nia- -�:���+g� �a[�V3�� pi�V�7u� �`<3 :���(.�7�, -�.����L �30�����. -����C�<�� �30����+ ek{*�<`��

3������ �*�98F� �$g7�

2.5.7 Computing with floating point numbers� � � �a[� +0����� 3��. �3"NL��� -��� !.�[ �3������d�C������3!��:.� pC�<�"+E�*+E3���� #n3����<���� ��0� �*:�� pC�<��+ ��3!`> -������3���<�����<+0����3 #g -��( 3�����+0� ����d����3 ����`���+E+� �����~� a[�<�0� �7uF��3���` #2 -+ ��:;� �7u; -�6�.�� &%��3�� 3����d(.�<`����d -�*:�� pC�<�

1.1+0���'&V+��RAB� 3���� ��3����<�R�. -��( #.3���� ^ 1j121 +G3� -��(. ���( o�I-?���:. ��� -��3�����+V3��. �3%&,� &V���

���<3 3���� ���> ����<+E3 ���<������+0�<��3� �p.��,��:.� pC�<� #� -��( 3���� +� ���� �.���(.+vNL��� 3���� ���<+0:��32��N -��� ����~3������<3���`���C�<�� �3�������#M:�� 3�� e �� ���� gn�'a[�<� �n -��( :���(��<� !.�M&%+�� }R��a[��� 3�����+ #-���.�j��������3npC�23����6��3���(!30�VpC������7a[�3��. �3X3����"����+E:.~3�+V��N ����+E3X`����6�.:;3� �3������.+,����a[���aF���.��!.�[ �3������D�C������3X�*:�� pC�<��+% ����"`����+0�!30� 3�����d �3������d M3���`> -��� `����0���<`<3%���<+0:��3�+ #;&V�~3���0��+E�C��`73%3��D����L �30��a[�R�<�0�����>�^_��(.�<��(�#�3�����+y��+C30��:��2���!�d ����B`> �+0��+��� ;��� �7u� ��6� �� #'��:��n������30�L -����������� -�

euler.C`����6�.:;3���+

��.�0�<303k� ���*�*(= ��������'uF���d �3������ ��Nj3���� 12:���<�"`�����+E3� ���3>� X�<a[�7�03��������+E+ #�+0����� `> M��� �. -+R3��pC�3� �/[�<�����6�������<�� �_� bc���X���[ - ��N 3�����+j+E��`<3���������+23��"�C������3j��:;3g`<���������D�.��3�N ���+ #[ -��(63�� �����Ma*��(������+E:.~3������ ��:���(����������+ NL��� �E+0 -NL� �6`����6�.:;3� �30������+g&V��30�$!.�[ �3������ �C������3,�*:�� pC�<��+��� �B+E3� ��03 &%��3��63����%T���+E3 -��(����+G3 ���6�C���E3� -��32��:���(�������.�,3��. �3g�d >� -��0�> -(;� pi�B��p*aF����:.+23��

�[��: �3c3�����+ �C������3>�

Floating Point Arithmetic Guideline 1: X�7a[�<�V`����6� ��0�R3k&,��!.�[ �3������ �C������3X��:��DpC�7��+,NL���

� ��:. -���3k� #.��N �3c��> �+E3%����� ��N 3������\����+E:.~3�+XN��0��� �����7u; -`<3�!.�[ �3������ �C������3X`<���6� :;3� M3�������+��

1 a[�<� a[�<�0� +0���6�.�� � uF������+0+E������+ ����a[���aF���.� !.�[ �30����� �C������3y��:��DpC�7��+y�d >�%pC� �d �3������d �3���`> -���� ��:.�~a� -�����3 #�p :;3c+E3���� ���73�:;����(���h �<������3ca- -�:���+ #;+0����`��R����30�<������(��L �30�X����+E:.~3�+, ����B����:���(���(y�jb &,�+0:�`�� � uF������+0+E������+ M���

x * x - y * y ��.(

(x + y) * (x - y)�)b,�.�7����NL����� #,3���+G3������ 3����

����+E:.~3�+%��N�3k&,� ! �[ M3������D�i������3c`����6�.:;3� �3������.+ NL���%� �*:. -���3k�d:.+E����� 3����"�0��L �3������ �i���C�<�� M3�����+==

Page 105: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �>][I

���!=�d �/[��+"���303��� +0�<�.+E��� {*����`��6� �*:. -���3k� ��+ +0�<�.+E��3���a[� 30�Z3���� 3���������+G3 �<�0�0����+ # &,� &,���0y 3!���<3

� ��: ����3k�d��������+G3X`� -+0��+ #.�<a[��� ��N �d �30�.�<�d �3���`> ���� #�&,�R&,��:.�(n�} ��a[�<� 3���� NL�����D:.� �3������ ��N 3����D �pC�'a[�D��:���(��������� # �[��:=�d ��Z&,����(��<� ���M&Y3��30����&%�.�73����<�

� ��030��`�:�L �� !.�[ �3������ �C������3 `����6�.:;3� �3������ ��+ �7u� -`73 ��� ����3>�H1vu; -`<3�����+E+ :.+E: �����(��<�C����(�+���z3����d���<������+E����3� M3������4 ��.(z��+ #j30�.�7����NL����� #g� M��( 3�� `�L -��� ���z�������<�� -_� $%�'&,�<a[�<� #g30�.�7���� M���`��<�E3� -��� ���C�<�� �3�������+"&%����`�� ������> -+E���� +E����� 3��ZpC���7u; -`<3>� ;��� ���.+G3� -��`�� #v�D:��3����.���`� �3������ -��((���aF��+0������p�� D�i�M&,�<�V��N 3����!p -+0�Fe_:�+0:. -��� #

2gX(��6����3V`��. -�����!3���� +E��������T.`> -��(�#�p.:;3V������3����

�7u*�C��������3>�2b,�*:�+ #F3�����+E�B���C�<�� �30������+ ����B�7u; -`<3 #;:������+E+ 3����<����> �(d30� ���'a[�<� �j���,:���(��<� !.�M& ���3���� �7uF�C��������3>�

���������'a[�<� #v��3"��+"+� -NL� 3��Z -+0+0:���� 30� M3"3���� L �������+G3 �7u*�C��������3!��+ e_�D:�`��4gB���������<� 3��. -� 3����������`���+0�����

p# -��( ���Z3�����+%`� -+0� &,� `> �� ��+0�6�7u; -`<3�~� ���7�.�0��+0����3 -�n����3��<���<��+V��N �p.+0���:�30�"a- -�:��

+0�d -���<��30� ��βp � 5,����+0� �*:�����30�� #!����3������<� �(.(���30������+ #R+0:;p.3E�� -`<3������.+ #! -��(x� :��30���.���`> �30������+

&V�~3������30�.��+,�� -�����! ��0�"�7u; -`<3>�bc��� �.� uF3 3s&,� ��:���(����������+ ����D+0�����<&%�. �3R���+0+"��p*a*����:�+ #n -��(=&,� ����3��~a� �30� 3�������p�� T.�0+E3

+0���'&V�����%3���� :���(��<����*�����X������p.���� � b,���0��:.������:;3 #M&,�, -+0+0:���� cp ��� M�0� !.�[ �30�����c�C������3 ��:��DpC�7�+E�*+E3���� ��N ������`���+0�����

p�

Adding numbers of different sizes.{*:;���C��+0�,&,� &c -��3 3��" -(�( 30�.� 3k&,� ! �[ M3������B�C������3 ��:��DpC�7��+

2p -��( 1�2���. �3c&V��� pC� 30�.�R����+E:.~3 � �Z �3������d �3���`> -��� #[��3X��+

2p + 1 =

p∑

i=0

bi2i,

&V�~3��(bp, bp−1, . . . , b0) = (1, 0, . . . , 0, 1)

� {*���.`<�X3�����+ p.���. ��0�D�7uF� -��+0�����6�. -+p+1

+E��������T.`> -��3(�������3�+ #

2p + 1��+B����3B���<�����<+0����3� �p.�� &V��30� �����<`���+0�����

p� �%��(��<�B3���� ^ 121j1 +E3� -��(. ���(=o�I-? # 3����

����+E:.~3,��Nn3����R -(�(���3���������+2p e_`�����+0��� N������ 3����V3k&,� ���> M����+E3,`> ��.(���(. �30��+

2p ��.( 2p + 2g�#F+0�D��3

`����6�.��<30����������������<+,30�.�1�

bc���V���<�.�7�� - �.����������������� ���<�0�V��+j30� M3 -(�(������ !.�[ �3����.�R�C������3g��:��DpC�7��+g��Ni(���h �<������3 +0� � ��+�G/F����+ �63���� ���+E+"+0�����.�~T `� -��3B(������~3�+V��Nj30�.� +0�d ����<�B��:��DpC�7�fe_��� ��:�� �7u; -�6�.�� # ,5*[* ��3�+B(������~3�+ g7�b,�.� L ��0���<�X30�.� +0� � �"(���h �<������`�� #;3���� �������R(;�� -+E3���`"��+ 3����"�<hi��`73>�b�� `�����a*����`�� �[��: 3��. �3v3�����+v��+v�.��32 ��6 ��030��T.`��L -�� ������������������#���73 :.+ `�����+0��(.�7�v3����,������p.��<�

��N `<���6� :;3����.� $V M����������` �*:�� pC�<��+<�� ;���n � � #[3����

n�_3��?j ,.= 82!$#I�J�k#I:48GS>�>=

Hn

��+j(��<T.����( -+,3����"+E:.�H��N�3����R����`��~�.�0�*`> -�+c��Nn3����"T���+E3

n�. �3�:;�� �C�*:��Dpi�<��+ #F3��. �3X��+ #

Hn =

n∑

i=1

1

i.

^ 3R+0����:��( ���M& pC� -� �> -+E�Z�7u;�<�0`���+0� NL���B�[��: 3���&%���~3�� ���������� -� 3��. �3B`<���6� :;3��<+Hn

NL��� ���~a[���

n � � �Fx2��: ������ �.�<��( +0��������D������=��:���������� 3��;����:���� 3���� ��:��DpC�7��+1:;� 3��

n#

-(�(������!3��������j����`��~�.�0�*`> -�+����:.+G3, -+g&,���.�[��:`> -�d�d �/[�c�[��:�� ��*������:��dN������n(��'&V��3��

1 ��.(

+0:�� :;� 30�.�D����`��~�.�0�*`> -�+�� �����=����3 #n30� M3!+0����:��( ����3!�d �/[�D -��� (���hi�<�0����`�� #���������3 �)mn�73 :�+30�0� pC��30� a� M���L -��3�+g ��.( +0���X&%�. �3j&,�c���<3>�2b,���c���������� ��

harmonic.C+0���'&V� pC�<��'&w`����6�.:�30��+

3����R3s&,� +0:���+c -��(Z��:;30�.:�30+,30�.�<� �

Page 106: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>]�P ������� ����� ���� �9��� �3� � � ���

�// Program: harmonic .C

�// compute the n-th harmonic number in two ways.

�#include <iostream >

�int main()

�{

// Input

std::cout << "Compute H_n for n =? ";

���unsigned int n;

� �std::cin >> n;

���

���// Forward sum

���float fs = 0;

���for ( unsigned int i = 1; i <= n; ++i)

���fs += 1.0f / i;

� �

��// Backward sum

��float bs = 0;

� �for ( unsigned int i = n; i >= 1; --i)

� �bs += 1.0f / i;

� �

� �// Output

� �std::cout << "Forward sum = " << fs << "\n"

� �<< "Backward sum = " << bs << "\n";

� �return 0;

� �}

Program 11:(0=>!h@.� �+�4,.= 82!$#I�"��W r

bc�����;/ NL���B D+0��`�����( -��(Z����`> ��C&V��� ��3%��+X���6�C���03� -��3 3�� # !.� &X����3��1 / i

��� ������ �>P -��(������ �F��� X�'& ��<3c:.+X�. >a[�" ��*��/ �3% -�Z� u;��`�:;3���������N�3����R���������� -� �

Compute H_n for n =? 10000000

Forward sum = 15.4037

Backward sum = 16.686b,�.�V�0��+0:��3�+ (���h �<� +0�����.�~T `� -��3�~�[� b,�.�B(���h �<������`��Vpi��`�������+ �7a[��� �����0�V ���� �������3 &V������&,�V30�E�L ��0���<�c���;� :;3�+<�

Compute H_n for n =? 100000000

Forward sum = 15.4037

Backward sum = 18.8079 X��3���`<�3��. �3 3����NL���0&c ���(z+0:�� (���( �.��3 `��. -����� #j&%�.��` �z`> -������3Dpi� `����E����`<3>� �%+0����� 3����

��������>u;���d �30�����

1

2(n + 1)< Hn −

��n − γ <

1

2n,

Page 107: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �>][o

&V���<�0�γ = 0.57721666 . . .

��+V3����D12:���7� � �Z -+E` ���<�0���.� `�����+E3� -��3 #i&,� ���<3Hn

�18.998

�"bc�. �3��+ #F30�.� p -`�/*&c ���( +0:��H�����'aF��(.�<+% � :�`���pC�7303��<�% ��������'uF���d �3���������N

Hn

������ (��*��+ 3�����NL���0&c M��( +E:.�epi���. >a[�d+0� p -(����� b,���6���> -+E��� ��+ +E���6�.�� � SV+ 3�����L ������7�

+0:����d -��(�+c ���� �(.(���( :;� T���+E3 #.3���� ����3��<�0����(��L �3��Va- -�:��!��N 30�.�"+0:�� 3�� pC� `����6�.:;3���( �����M&%+e_`����6� ��� �3���a[��~� g�N -+E3��2S 3g+0�����X�C������3 #[3����%+0� � �V(���hi�7������`��%pC�73s&,�<����3����X� ��03��� -�+0:��O -��(63����+0:����d -��( 1

i

3��dpC� -(�(.�<( ��+R+0��� ������ 3��. �3R3���� �(.(���30����� (.����+ �.��3"`��. -�����D3���� � ��03��L � +0:�� -���F������� #'rs:�+E3 ���/[�%���

2p + 1 � � = � � 2p �2bc��:.+ #*�����[ ��0(.���+0+ ��NC���'& �d -��� �������X+0:����d -��(�+j M��� -(�(���(�3�� ��3 #F3���� +0:�� +G3� ��F+,3����"+� ������^_�d`�����30�� -+E3 #[3����%p -`�/*&c ��0(�+0:�� +E3� M�03�+j30� -(�(�:;��3����V+0�d -�;+E:.���d ��.(�+vT���+E3>� b,���<����NL���0� #

3����%a- -�:��V��Ni3����%� ��E3��L -.+0:�� �����'&V+ e `����6� ��� �3��~a[���� g�+E��M&%�� #� -���'&V�����R3����V+0�d -�.+E:.���d ��.(�+3�� `�����3E����p.:;3���� bc���d+0:����d -��(�+"30���� �3���( ��� 30�.�d����( ��Nc3����d+0:����d �3������=�. �a[� +E30��� �����*(`��. -��`�� 3�� ��� !.:.�<�.`<�d30�.�+0��������T.`> ��.( ��N%3����d� ��03��L � +0:�� #j+0���.`<�3����<� ��0�2e_`����6� ��� �3���a[��~� gL ��0�����bc��� � ����������������� rs:.+G3%��p.+0�<�Ea[��( ��> -(�+c:�+c3�� ��:;�%+0�<`�����( ��:.��(.�<��������

Floating Point Arithmetic Guideline 2:S%a[����(Z -(�(������D3k&,�D�*:�� pC�<��+,3��. �3c`�����+0��(��<�� Mp ~�

(���h �<�%����+0� � ���

Cancellation.5,����+0��(.�7�X3���� �*:. -(;�� �30��`R� �*:. �3������

ax2 + bx + c = 0, a�= 0.

^ 3X��+c&,�<�i/F���'&V��3��. �3c��30+c3k&,� ���*��3�+X ���� ����a[��� p*�

r1,2 =−b

� � b2 − 4ac

2a.

^_� ���������� -�\3��. �3c`����6�.:;3���+ 3�����+0� ���*��3�+ #�&,� ��������3 3����<����NL����� &c -��3c3�� `����6�.:�30�R30�.�Ra- -�:��d = b2 − 4ac

��Nc3���� B.�/���>= �[86�/#�,.#0� � ^_Nb2 -��( 4ac

M�������<������+0�<��3� �p.�� -+�!.�[ �3������Z�C������3�*:�� pC�<��+"&V��3�� �����<`���+0�����

p#v��:;� �����7aF����:�+ �<�E����� ��+E3����d �3���+"��: M�� -��30��� 3��. �3 30�.�6�0��+0:��3

d̂��N

3����!T.�. -�+E:�p�30�� -`<3������ �. -+B+E�d -�C����L M3���a[�!�7�0����� �|d − d̂| � 2−p|d|

�Bb,�.��+V���> -��+ # �<a[��� ��Nd��+

`����+E� 3�� � �<��� # d̂ &%��� pi�! �&c ��N������ dp*� 86:u� �2* � �>� 3��. -�3����"(���+E3� -��`��"��N

d3�� � �<���F�

bc��� ������p.��<� M����+0��+"��Ng3���� �*:��Dpi�<��+b2 -��( �-��� 4ab

���� �.��3"���<������+E����3� Mp ��6 -+ ! �[ M3�������C������3%��:��DpC�7��+ # ���Z&V����`�� `> -+0�!�<�0������+V ���� �d -(��"��� `����6�.:;3������D30�.�<� � SV+0+0:����

b = 2p, a =

2p−1 − 1, c = 2p−1 + 1e ��230�.�<+0�� ���� ! �[ M3������ �C������3"�*:��Dpi�<��+ g7�b,����� 3���� �7u; -`<3 a- -�:��6��N

d��+

4� b,���Da- -�:��

b2 = 22p ��+ !.�[ �30�����d�i������3R��:.� pC�<� #yp.:;3 4ab = 22p − 4��+R����3 #y+0����`��

3�����+j�*:��Dpi�<� �. -+2p− 2

+E��������T.`> -��3g(�������3�+3e -�.��NC3������ � ��:. - 3��1g2������3�+gp.���. ��E� �7u*� -��+0�����y�

b,�.�R���> ��0��+E3�! �[ M3������ �C������3,�*:��Dpi�<�,��+,��p�3� -������(�p*�d����:���(������ :��2e -(�(������4g�#� -��(� -N�3��<�,3����

e_�<�E����� � N��0���)g2+E:�p�30�� -`<3�������#�&,�%���73d̂ = 0

� b,���X����� �3���a[�,�<�0�0��� ��N 30�.��+j`����6�.:;3� �30����� ��+230�.�7����NL�����1����+E3��> -( ��N

2−p �bc���,���> -+E������+v3��. �32��� +0:;p�30�� �`<3������R3s&,�"�*:�� pC�<��+v3��. �3j ����X -�����+G3v� �*:. - #[30�.�c�������,+0��������N��

��`> ���3 (�������30+g`> -��`��<i�> -`�����30�.�7�>� ^_N #;����3����B��3����<�,�. -��( #�3����V�����d -���.���.� ���+E+ +0��������T.`> -��3 (�������3�+ -��0�> -(;�d`> ��0�E� +E����� �7�0������+cN������\�.�0�<aF����:�+,`����6�.:;3� �3������.+ #�3����R+0:;p�30�� -`<30��������:.���<�� -�6�.���T.��+

Page 108: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>]�# ������� ����� ���� �9��� �3� � � ���

3�����+0� �7�0������+ � 3���� `> -��`����L �3������ �.�0������3���+ 30�.�Z�����7aF����:�+0��z���+0+�+E��������T.`> -��3 (�������3�+D3�� � :�`���������R+0��������T.`> ���3,(�������3�+ ��N 3���� ���<+0:��3>�SV�[ -����#M3����g�7u; -�6�.��2&,�j�[ �a[� ���<��� ��+� ��03��~T `<�L - #>p.:;3�pC� �+0+0:;����( 3��. �3 `> -��`����L �3������"�. ����C����+

��� ���� �`<3���`��-� 1 a[������� 3�������:. -(;�� �3���`,� ��:. �3������6� u� -�6�.�� #��~3g��������3vpC�,3��. �3j30�.�c� ��: M3�������+230� M3`������ :;� ���= -�= ����.���`> �30����� �. >a[� 3���� �������C�<�03k� 3��. �3B30�.�<���R(���+0`<���������. -��3

b2 − 4ab��+R�D:.`��

+0�d -���<� 3��. -�a, b

-��(c30�.�<��+0���a[��+<�j^_� 3�����+X`� -+0� #�`> -��`��<�L �3������ 1���*[* �. ����C���y�

bc���"(.��+0`�:�+0+0����� `> -��pi�"+0:����d ��0� � ��(d���ZNL���0� ��N� 3������0(���:���(�����������

Floating Point Arithmetic Guideline 3:S%a[����(�+0:;p�30�� -`73������D3k&,� �*:��Dpi�<��+,��N -�����+E3,� �*:. -

+0� � � #���N 30�.�<+0�!��:.� pC�<�0+X M��� �0��+0:��3�+c��N���3����<��!.�[ �3������ �C������3c`����6�.:�3� �3�������+��

2.5.8 Details

Other floating point number systems.b,�.�d^ 12121 +E3� ��.(. ��0( o�I-? (.�7T ����+ 3k&,� ������� !.�[ �3������

�C������3B�*:�� pC�<�R+E�*+E3�����+ # ���/#;@.* � H'�'&q�<�>#�B �'B?(0=>���������"!$# ep = 32

g�#y -��( B !$:uS)* � Hh� &q�<�>#�B �hBY(0=>� H�>�/���J!$# e

p = 64g�#v -��( +0����� �.L �30NL������+"��h �<� ���6�.������<��3� �30������+V��N 3�����+0� 3k�*�i��+�� b,�.�7���6��+

-�+E�3���� ^ 1j121U+E3� -��(. ���(=#[I-? 3��. �3" -���M&%+Vp -+0�β = 10

#nNL���"��p*aF����:.+R���> �+0����+ � 30�.�D(���`����d �NL�����d �3X��+%30�.�"����� ���Z&V����`��Z&,�!30�.����/� �pC��:;3%�*:��Dpi�<��+ # -��( ���Z&V����`��Z&,� :�+0:. -���d���<������+0�<��3�*:�� pC�<��+<� ^_� � M�03���`�:�L M� #g p -+0���

10+G�F+E3��<� �. -+ �.� �������+ ���z3����da� ��:���� ��.��� �3 (���`����d -

N��� -`73������. -C�*:�� pC�<��+c���/[�1.1

��.(0.1�

IEEE compliance.� ������ ��� ����+E3%�.L �30NL������+ #�3����!3k�*�C��+

float -��(

double`����E����+E�C����( 3��

3����D+0�������� -��( (���:�p.�� ������`<��+0����� ! �[ M3�������i������3 �*:�� pC�<��+R��Ng30�.� ^ 121j1U+E3� ��.(. ��0( o�I-? #n30�.��+`����0�0��+E�C����(�����`��6��+":�+0:. -��� ����3 ������� 3���� ������� ���� �7u� -�6�.���#n��Ng�[��: ����D30�0�F���.�3������7�.�0�*(�:�`��3���� `> -��`����� �3�������7u� ��6� ��V&,�"�[ �a[� #;�[��: ��������3 &%���~3��

float b = 16777216.0f; // 2^24

float a = 8388607.0f; // 2^23 - 1

float c = 8388609.0f; // 2^23 + 1

std::cout << b * b - 4.0f * a * c << "\n";

-��( �7uF�i��`<3V3������73V3����!������(���`<30��( &%������� ���<+0:��30� �g:;3B��3V�d �� �> -+0������. ����C�<� 30� M3%�[��: ���<3

3����B`����0�0��`<3,����+0:��34#;�<a[��� 30�.��:����d�[��:;� � � �3�NL����� `<L -����+23�� NL�����'& 3����R^ 121j1z+G3� -��(. ���(�o�I-?;�

b,�.� ����+G3V���/[�<������� -+0��� ��+%3��. �3V30�.� �.L M3�NL����� ����3��<�0� ���� :.+E��+R ��������+G3��<�B&V�~3�� �������"p.��30+%3���C�<�0NL����� 3���� `����6�.:�3� �3������y�%�������� 3�����+B+E������+B���/[� 6�����*( ��(��> 6��� �������<�� - #i��3R`> -� pC� N �3� �NL���% ���������� ��\&%����+0�"NL:���`<3������ ����3k��`<���~3���`> -��� ���<�����+c����3����"^ 1j121 +E3� -��(. ���(Zo�I-?;�

x2��: 1���*[* ����+E3,���/[��~�d+0���"30�.� `> -��`��<�L �3�������7hi��`<3%��� 30�.� NL�����'&V���.� +E���������������� �*:���a- -�����3a- ����L -��3c��N�3����! MpC�Ma[� `���(.�-�

float b = 16777216.0f; // 2^24

float a = 8388607.0f; // 2^23 - 1

float c = 8388609.0f; // 2^23 + 1

Page 109: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �>]�q

float bb = b * b;

float ac4 = 4.0f * a * c;

std::cout << bb - ac4 << "\n";$%�<�0� # 3���� ����+0:��3�+%��N 3����!����3��<������(��L M3��R`����6�.:�3� �3�������+c ���� &%����3E3�����p -`�/�30�

floata- ����L Mp ���+ #

������p �p.������+0:��3����.� ���Z3���� �7uF�i��`<3���( ����:���(������6��N4ab

�Vb,����� 3����!T.� ��+0:;p�30�� -`73������Z���<a[�� -�+3����!`� -��`����L M3��������7hi��`<3�� � #0* � ��� # ��Nv`<��:��0+0� # 30�.�"`����6�.����<�c(���`���(.�<+%3�� /[���7� 30�.� a� M���L �p.��

ac4��� �0������+E3��7�V&V��30�Z�������"�����<`���+0�����y�� ;���V3�����+X�0�> -+0����# �[��: `> �� 3k��� ��`> -���d�����'aF��(�� `����6�.����<�����3������3�� �d M/[�"+0:;���R3��. �3�!.�[ �3������ �C������3,�*:��Dpi�<��+X ���� �.��3c/[�<��3X��� ���<����+E3��<�0+����� M3 ��+!3����6������ ��� ��N 3�����+�� x2��: :�+0:. -��� `> -������3 NL:���� 30��:�+E3 3���� � ^3^�^ ��!$89(+*P� ,.# ���

��N2 �.L �3�NL���0� # ��.( ��3%��+V������30�.�7�B�> -+E�������B&,���03���&%������R3�� ������(���`<3V�.�'& !.�[ �30����� �C������3V��:.� �pC�<�0+ �7u� �`<3��� pC���. �a[�6��� +E�C��`��~T `D�.L �3�NL����� � ^ 3 ��+"�������D���6�C���03� ���3RNL���!�[��: 3�� /F���M&| -��(:���(.�7��+E3� -��( ! �[ M3������!�C������3,�*:�� pC�<�,+E�*+E3�����+ ����������<�� � #; -������ &V�~3���3��������,������~3� �3�������+�� b,�.��+/F���'&V��<(.���B&%���y -���M& �[��: 3�� ��(�����3���N�� -��(�&,���0/ ��0��:.��(�.�0��p �����+ 3��. �3c��������3,`������R:;� ���+E�C�<`���T.` �.L M3�NL������+��

The type long double.b,���!5cW W +E3� -��(. ���(�������+E`<����pC�<+, -����3����<�,NL:��.(. -���<��3� - !.�[ �3������!�i������3

�*:�� pC�<�63k���C� `> -����(long double

� ^ 3�+����3��<�� ��+ ����(w&V��30�w30�.� ��<303��<�l���

L#X -��(w��3���+

��:. ��� -��3�����("3��. �3 30�.�2a� ��:��2�� ��.���2��Ndouble

��+�`�����3� -������("���!3����2a� -�:.� �� -�����2��Nlong double

�QB��+E�.��3�� 3�����+ #M3����g`�����a[�<��+0����� N������

double30�

long double��+�����3 (.�7T ����( 30�%pC�j c����������3������

p*�d3���� 5XW W +E3� -��(. ���(y����.����

float -��(

double:.+E: ���� `����0�0��+E�C����(z3�� +0�������� -��(4(���:;p.�������<`���+0����� ��N%3����

^ 121j1 +E3� ��.(. ��0(�o�I-? # 3����<���z��+ ��� +0:�`�� (���N -:��3 `��.����`��zNL���long double

� ^_� ���� �`<3���`���#long double

��������3 +0���6�.�� pC�d Z+E�*�������F� NL���double

#vp.:;3 ��3 ��������3 -�+0�ZpC��+0�����<30�.���.����+E���2AR�630�.�c�.L �3�NL������:�+0��(6p�� 30�.�X -:;3�������+ #�NL���j�7u� -�6�.���#

long double`����E����+E�C����(�+j30�"3����

�������d -�� � ��( !.�[ �30����� �C������3 ��:.� pC�<�!+E�F+G3����F(2, 64, −16382, 16384)

v 30�.��+!��+"�7u� -`73���=30�.�(���:;p ���� �7u*3�����(���(�������`<��+0����� ��N 3���� ^ 121214+E3� -��(. ���( o�I-?;�

Numeric limits.^_N �[��: &c -��3!3��Z/*�.�'&t3���� � ��� -���<30�<��+!��N 30�.� ! �[ M3������ �C������3"�*:��Dpi�<� +E�*+��

3�����+DpC��������(float

#double

��.(long double

���w�[��:;�6�.L M3�NL����� #j�[��:w`> ����<�6� ��M� 3����numeric_limits

&,�6�. �a[��:�+0��( pC��NL���0�6��� 3���� ���������� ��limits.C

��� {*��`73������ �*� �*�@PF�$%�<��� ����R3����R������<a- -��3V�7u*�.�0��+0+0������+,3������<3����<�c&V�~3�� 3������~�X���� -��������+ #F+0���'&V��NL���X3���� 3k���C�

float�

�7u*������+0+0�����Me_��N 3k�*�i�int

g ���> -�������

std::numeric_limits<float>::radix β

std::numeric_limits<float>::digits p

std::numeric_limits<float>::min_exponent e ����� + 1

std::numeric_limits<float>::max_exponent e ����� + 1

� ������d ��0/ 30� M3std::numeric_limits<float>::min()

(��*��+ # !.� ����a[�d3����+0�d -���<+E3float

a- -�:��Re pC�<`> -:�+0����N 3�����+0����� p.��3 #�30�.��+ +0�d -����+E3!a- -�:��6��+ +0���6�.�� 3����������[ �3���a[� ��N,30�.�L ��0����+E3,a� ��:��)g�#;p.:�3,3����"+0�d -���<+E3 �������d -�� � ��( (I!.���/���/p�� a- -�:����

Page 110: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

���>] ������� ����� ���� �9��� �3� � � ���

Special numbers.� � �. �a[� ������30��������(�3��. �3V30�.� !.�[ �30����� �C������3V+E�*+E3�����+%�����<+0`<����pi��( p��Z3����

^ 121j1 +G3� -��(. ���( o�I-?�`�����3� -��� +0����� +E�i��`��L - �*:�� pC�<��+>z 3��������R����`���(.���.� :.+E��+R�7uF�C��������3Ba� ��:���+3��. �3c(�� ����3X�*`�`�:;�X���Z�������d -�� � ��(d�*:�� pC�<��+<�AR�Z30�.� �����"�. -��(�#;3����<���" ����R3���� 30�.� B �># !$= 8G,5*P���q�hB �*:��Dpi�<��+c��N 3���� NL������

d0.d1 . . . dp−1 � βe � � ,&V�~3��

d0 = 0�RS (.�<�.���0�d -�� � �<(Z�*:�� pC�<��+B�. -+B+0�d ����<�% �p.+0���:;3��!a- -�:�� 3��. -� -��� �������d -�� � ��(

�*:�� pC�<�>�2^_��� ��E3���`�:�L �� #0��+% (����������d -�� � ��(d�*:�� pC�<�>�

bc������3����<�!+E�C��`<�L -g��:��DpC�7��+!`> ��.����3 �0�> -��� pC� `> -���<( �*:��Dpi�<��+�� bc���<�0�� ���� a- -�:���+ �0�<� �����+E����3����.�

+∞ -��(−∞ # -��( 3����<� ���� ���<3�:;������( p*� �Ma[�<� ! �'&V���.�����C�<�� �30������+��bc����� 3����<���

����B+E�<a[�<�� -ia- -�:���+g`> -���<(NaN

+�e_NL��� �E����3, "�*:��Dpi�<���5g 30� M3, ����V���73�:;������(p��6���C�7�� �3�������+g&%��3��:���(.�7T ����(4�0��+0:��3 #j���/[�d3� �/F���.� 3�����+ ��:. ���� �0�*��3 ��NB �����[ �30��a[� ��:��DpC�7�>�4b,������(��> pC��������(3�����+0�Va- -�:���+ ��+g3�� �����'aF��(��B��������! � u;��p.����~3s�D����(��> �������!&V�~3����7u;`<�<��3������. - +E��3�:. �3�������+�� ^_�.+G3��> -(��N +0���6�.�� �pC���E3������ 3���� ���������� �� &V����� +0�����"���C�<�� �30����� N -���+ # ��3%�d �/[��+V+0�<�.+E� 30�6���<3�:;��� -��7uF`��<��3������. -,a� ��:���� b,�.��`> -���7� ��N%30�.� ���C�<�� M3������4`> ��43������ (���`���(������'&\3�� (��> -,&V��30�z3����+0��30: M3������y�

2.5.9 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6/F���'&|3���� !.�[ �30������C������3 ��:��DpC�7�"3k�*�i��+float

��.(double

# -��( 3��. �3!3����<� ���� ��������������<�� -y3��. -� 30�.� ����3������� -C3k�*�i��+>z

�$g�:��.(��<�0+E3� -��(�3���� `�����`��<��3X��Nv �!.�[ �30����� �i������3c�*:�� pC�<�c+E�*+E3����Rz8.g6/F���'&Y3��. �3X3���� ^ 1j121 +E3� -��( M��( o�I-?�(���+0`<���~pC��+V+E�i��`���T.` !.�[ �3����.�D�C������3V�*:�� pC�<�%+E�F+E30����+:.+E��( -+c���*(����+ NL���

float ��.(

double���Z�d -���6�.L �3�NL���0��+>z

?5g6/F���'&x30�.�R3��;����� ���[ M3������ K ������3cS%���~3������<3���`R}R:���(����������+>zI$g6pC� �&c ���� 3��. �3R`<���6� :;3� M3�������+X����a[���a*����� 3���� 3k�*�C��+

float ��.(

double�d ��Z(������a[�7�R��� �

�7u� -`73%����+E:.~3�+ #;����+E3�~��(�:.� 3��D�.�����+X��� 3����"a- -�:��R�� -�������

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)gd�7a� -�: M3�� �7uF�����<+0+0������+d����a[��~aF�����=3���� ����~3������<3���`d3k�*�C��+int

#unsigned int

#float -��(

doublez

ek} �$gd`<���6� :;3��V30�.� p.���. ��0�����<�����<+0����3� �3������ ��Nv D���~a[��� ���� - ��:��DpC�7� zek} 8.gd`<���6� :;3�� 3���� !.�[ �3������D�C������3%�*:�� pC�<�V���> M����+E3V30�d ����a[��� ���> ���*:�� pC�<� #.&V��30������+E�i��`<3

3�� T.����3�� !.�[ �3����.� �C������3,�*:�� pC�<�c+E�*+E3����Rzek}R?5g�&,���E/&%��3�� D���~a[����!.�[ �3������ �C������3c�*:��Dpi�<�c+E�F+E30���Rzek}"I$g��0��`�������� � �":.+0 -���"��N ! �[ M3������D�i������3c�*:�� pC�<��+,3��. �3caF����� �3���+c -������N�30�.�R3��;����� ���[ �30�����

K�������3XS%����3������<30��`B}R:.��(.�<�������+>zek} P.g�&X����3��B���������� ���+ 3��. �3,�C�<��NL�����H`����6�.:;3� �3������.+ &%��3�� !.�[ �3������ �C������3X��:��DpC�7��+��

Page 111: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����5 � ���� ��� ��� ���3� ��� �F� ��� ��� �����

2.5.10 Exercises

Exercise 36^ pq,5*P:+,5�<� �V�;� KL!.*/* !$13�[#;@O�'&)(0=>� �����J!$#0�M�>�<�"(+H'S DqHJ�>�<�"(0A2, ���h!$=�B.�/#;@ �<!Q�V�;�C��!$#0H

p��>=)�h�J!$# = :4* �>� ! K 86�-&`�hB �'&)(0=>� �����J!$#0�LW \ �E,5�>�h:482��, � !�,5���/#;@](I!$�[#0�6=>�J(0=>�>���>#0�J,5���J!$#, ���h!$=�B.�/#;@M�<! � ^3^�^ � ���4Ak�V�4,5� �/��A

float�h!$= =>� �"(;!$#�B5�6�<!

F(2, 24, −126, 127)

,.#�B B !$:4HS)* �M��!$= =>�>�"(I!$#�B5�R�<!

F(2, 53, −1022, 1023)

W \ �2,5*P��!U,5�>��:N82�6�V�4,5�32

S ���V��,.=��R:;���'B]�<!=>�J(0=�� ���>#0�

intpw,5*d: �>�LW � � �

$g6 / 4 * 2.0f - 3

p4g2 + 15.0e7f - 3 / 2.0 * 1.0e8

` g392593 * 2735.0f - 8192 * 131072 + 1.0

(Ng16 * (0.2f + 262144 - 262144.0)

Exercise 37r !$89(0:;�<�X�V�;��S>�/#�,.= D �'&)(;,.#0�h�J!$#0� ! KX�V�;�3K�!.*[* !$1��[#;@�B �h�>�/8G,5*_#I:N8�S��>=)�LW

, 0.25S 1.52

� 1.3B 11.1

� � � Exercise 38

� !$=f�V�;�s#I:48GS>�>=)� �[# ^ & �>=>�>�/����� ��A��h!$8X(0:4�<�i# �h,.=>� ��� � !�,5���/#;@ (I!$�/#0� #I:N8�S>��=)��/# �V�;�F��Dq�>�<�>86� �

(2, 5, −1, 2),.#�B �

(2, 5, −1, 2)W � � �

Exercise 39\ �4,5�k,.=>�X�V�;� *-,.=J@c�>�>�k,.#�B?��8�,5*[* � ��� �C��+E��3���a[� # !$= 8G,5*P���q�hB?���/#;@.* � ,.#�B�B !$:+S)* �

(0=>�h�>�����"!$# � !L,5���/#;@9(I!$�/#0� #I:N8�S��>=)��A�, ���h!$=�B.�/#;@ �<!?�V�;� � ^3^�^ �>�J,.#�Bc,.=hB � ��� � � � � Exercise 40

j !$178�,.#ID � !�,5���[#;@i(I!$�/#0� #I:N8�S>��=)� B ! �V�;�i��Dq�>�<�>8?� � (β, p, e ����� , e ����� ) ,.#�B

�(β, p, e ����� , e ����� ) �h!$8X(0= �/��� � � � �

Exercise 41r !$89(0:;�<�X�V�;�Xpq,5*P:u�6! Kf�V�;� pq,.= �",cS)* �

d, K>�<�>= �V�;�YB ���>* ,.=�,5���"!$#��>�J,5�<�>8��>#0�

float d = 0.1;

� �>�h:482�9�V�;� � ^�^3^ �>�J,.#�Bc,.=�B � ���uW � � � Exercise 42

\ �4,5�����9�V�;� � (I!.�<�>#0���",5* (0=>!�S)* �>8 1��/�V� �V�;��KL!.*/* !$1��/#;@6* !!>( � ek}!I$g

for (float i = 0.1; i != 1.0; i += 0.1)

std::cout << i << "\n";

Exercise 43\ �4,5�����9�V�;� � (I!.�<�>#0���",5* (0=>!�S)* �>8 1��/�V� �V�;��KL!.*/* !$1��/#;@6* !!>( � ek}!I$g

for (float i = 0.0f; i < 100000000.0f; ++i)

std::cout << i << "\n";

Exercise 44\ = ���<� ,�(0=�!�@$=�,.8 �V�4,5�9!$:4� (0:;�V� KL!$=G,G@$�/pw�># B �h�>�/8G,5*m�/#�(0:4�k#I:N8�S>��=

xA

0 <

x < 2A ���V�s# !$= 8G,5*P���q�hB

floatpw,5*d: � !$#]DN!$:N= (+* ,5� KL!$= 8�W����;� !$:;� (0:;���>�;!$:4* B �h!$#0�J,.�/# �V�;�

�hS �[#�,.= D B.�[@$�/�V� ! Ks�V�;�f��� @$#I� { �',.#�B.A �>�J,.=)���[#;@ 13�/�V�1A ,.#�B��V�;� �hB �h�>�/8G,5* �'&)(I!$# �>#0�JW ��!$:

8�,.DU,5����:48��Y�V�4,5� �V�;� � !�,5���/#;@�(I!$�/#0� #I:48�S��>=R��Dq�>�<�>8 :N#�B �>=)*PD5�/#;@ �V�;�6��D)(I�float

�4,5�S�,5�L�

β = 2W � � � � ���

Page 112: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��� � ������� ����� ���� �9��� �3� � � ���

Exercise 45�m�;� #I:48�S��>=

π�h,.#�S>�FB � { # �hB��V��=>!$:`@.�?pw,.= �J�>� �/# { #I�/�<�i��:N8?�LW j ��=>�F,.=>�i��1b!

! K9�V�;�>8�W

π

4= 1 −

1

3+

1

5−

1

7+ �����

π

2= 1 +

1

3+

1 � 2

3 � 5+

1 � 2 � 3

3 � 5 � 7+ �����

\ = ���<�2,6(0=>!�@$=�,.8 K�!$=���!$8X(0:4���/#;@U,.# , (c(0=>!L&5�/8G,5���J!$# ! KπAXSh,5���hBC!$# �V�;� ���sKL!$= 86:;*-,5�LW

\ ���J� �9K�!$= 8Y:;*-,6�/� S�� �V�<�>=�K�!$= �V�4,5��(0:4=<(;!.��� � � ��� Exercise 46

\ = ���<�i,b(0=>!�@$=�,.8fpsys.C

�<!9p���h:u,5*d� �q� ,9# !$= 8G,5*P���q�hB � !L,5���/#;@�(I!$�[#0��#I:N8�S>��=��Dq�>�<�>8 �

(2, p, e ����� , e ����� ) W ���;��(0=�!�@$=�,.8 �>�;!$:;*-Bs=>�',cB9�V�;��(;,.=h,.82� �<�>=)�pAe ����� Am,.#�B

e �����,5� �/#�(0:;�V� ,.#�B K�!$=��h, � �G(I!.�������[p��6#I:N8�S��>=x

K�=>!$8 � (2, p, e ����� , e ����� ) B.=h,.1 ,U�>�/=>�>* � ! K

=�,cB.�[:;�x

,.=>!$:N#�BF�V�;�9!$= �[@�/#�W � ���k�V�;� *P� S =�,.= Dlibwindow

�V�4,5�����s,.pw,.�/* ,cS * �i,5�m�V�;�9��!$:N=)����;!$82�"(;,$@c�?�<! �>=>�h,5�<�Y@$=�, (+���J�',5*�!$:;� (0:;�JW � ���Y�V�;�X(0=>!h@$=�,.8 �<!2p��>= � KhD �V�;�6#I:N8�S>��=)�6DN!$:��!$89(0:;�<�'BR�/# ^ &`��=>�>���L� � ��W � � � � � �

Page 113: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Chapter 3

Functions

���>8

Page 114: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

����? ������� ����� �q�� ��� � � � ���

3.1 A first C++ function�������k�����>���J!$#M�/#0��=�!�B.: �h� � rkt9t K�:4# �>���J!$#0�LW ��!$: 1���*/*0* �h,.= #]�;!$17�<!6,cBcB�Kh:4# � H���"!$#0�M�<! D`!$:4=R(0=>!h@$=�,.8?�hA�,.#�BE�;!$1 �<!O�h,5*[* �V�;�>8GW \ ��,5*P��!7�'&)(+*-,.�/# �;!$1Kh:4# � ���"!$#0�C�',.# � � ���J�>#0�V*dD S>�]8�,cB �C,.pw,.��*-,cS)* �YKL!$= 8G,.#IDU(0=>!�@$=�,.86� ,5�Y�V�;��L,.8�� ���[82�>A3�V��=>!$:`@.�2�L�J(;,.=�,5�<�?�h!$8X(0�/* ,5���"!$#E,.#�BR*d�"S>=�,.= �J� � W

^_� 3����,`�����30�7uF3j��N !.�[ �3����.�B�C������3 �*:�� pC�<�2+E�*+E3�����+ ���6{*��`<3������ �*�JI #��C�'&,�<��+3e_��N 30�.� p -+0�βg

����,:;p.� �*:���30��:.+<��1va[���6��N;�[��:D�. >a[�,����3 +0���a[�<(61 u;�<��`<��+0�,?[P #��[��: `> �� ���d ��������23��. �3 `<���6� :;3����.��C�'&,�<��+R��+ p -+0��`D -��( N���� ��:.�<��3��� :�+0��( ���C�<�� M3������ ��� �d -��� `<����3��7u*3�+�� ^_� 5XW W # Kh:4# � ���"!$#0� ����,:�+0��(D3��R����`> ��.+0:�L �30� +0:�` � ���C�<�� �30������+ #��d �/*�����V��3 �> -+G� 3��R����a[��/[� 3������ �d -��� 3������<+ #-&V�~3��(���hi�7������3c� ��� -���73��<��+ #F -��(ZN������H(.�~hi�<���<��3c�.�0������ -��+��� � �. �a[� �����> -(;��+0����� �*:���3�� 6��:.� pC�<�V��NjNL:���`<3�������+ # +0����`�� 3����

mainNL:���`<3������ ��N2�<a[�<�0�

5cW"WY���������� -�\��+X +E�C��`��� -yNL:.��`<30�����2ek{*�<`<3������ �*�����98.g7�K �0������ -�\� �V+0���M&%+v���M& NL:���`<3������.+�`> -� pi� :.+E��( ��� �������<�� -i� ^ 3vT���+E3 (��<T.����+ VNL:���`<3������DNL���

`����6�.:;3������%3���� a- -�:��be NL���j V����a[��� ���> -;��:.� pC�<� b

��.(D����a[���D����3������<�ee �i��+0+0��p.��!�.�<�[ �3���a[�)g �

^ 3g30�.�<��`> -��+ 3�����+jNL:.��`<30�����6NL��� +0�7a[�<�� - a- -�:���+j��Nb -��(

e�jb,���%`����6�.:;3� �30������+j M���X�C�7��NL��������(

�'a[�<�%3���� !.�[ �3������ �C������3X��:��DpC�7�c3k���C�double

�// Prog: callpow.C

�// define and call a function for computing powers

�#include <iostream >

�double pow (double b, int e)

�{

// PRE: e >= 0 || b != 0.0

// POST: return value is b^e

���double result = 1.0;

� �if (e < 0) {

���// b^e = (1/b)^(-e)

���b = 1.0/b;

���e = -e;

���}

���for (int i = 0; i < e; ++i) result *= b;

� �return result;

��}

��

� �int main()

� �{

� �std::cout << pow( 2.0, -2) << "\n"; // outputs 0.25

� �std::cout << pow( 1.5 , 2) << "\n"; // outputs 2.25

� �std::cout << pow( 5.0 , 1) << "\n"; // outputs 5

� �std::cout << pow( 3.0 , 4) << "\n"; // outputs 81

Page 115: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� ���'I

� �std::cout << pow(-2.0, 9) << "\n"; // outputs -512

� �

� return 0;

� }

Program 12:(0=>!�@.� �_�',5*/* (I!$1�W r

�g��NL�����V&,�X�7uF�.L -��� 3����V`�����`��<��3�+g�.�<`���+0+� M�0� 3��!:.��(��<��+G3� -��(63�����+j���������� -�|����(.�73� -�� #[��73 :�+���<3g -� �'a[�<�0a*���<&���N &%�. �32��+ ���������"��� ��� 3����cNL:��.`73������

pow� ;���g�����������[ �3��~a[�c� uF�C��������3�+

e#be

��+ ��p�3� -���.�<(N��0���1p��

e� NL���(�D:.~3����.���`> M3������ &V��3��

b�2b,����+ ��+ &V�. �3 30�.�

for� ��*���(��*��+��jb,�.�

`> -+E�6��N �����[ �3���a[�e`> �� pC� �. -��(����( p�� 3����6NL���0� :�L

be = (1/b)−e � -N�30�<� ����a[�<�03����.� b -��(

�����[ �3����.�e��� 3����

if� +E3� M3���������3 #�&,�X�. �a[�% ��6� �*:���a- -��<��3 ������p.���� &V��30�6 B�C��+0��3��~a[� �7uF�C��������3>�

b,�.�dL M303��<�D������ &,���0/*+ ��Nb

�= 0

#g -��( ����(.�<��(�#j�����[ �30��a[�6�C�'&,�<��+D��N0 ����d�d �3������d M3���`> -���

:���(.�7T ����(y�

3.1.1 Pre- and postconditions

1va[��� a[�<�0� +0���6�.��BNL:���`<3������ +0����:.�(�(��*`�:�������3,��3�+ (0=>���h!$#�B.�����"!$# -��(���30+ (I!.���<��!$#�B.�����"!$# #��� 30�.�XNL�����t��Ni`�����������3�+��vb,���X������`�����(���3������ +E�i��`���T.��+2&V�. �3j� �+j3��"�.���( &V����� 30�.�XNL:��.`73��������+ `> -����(�#� -��(=30�.� �C��+E30`�����(.�~3������ (.�<+0`<����pi��+"a- -�:��6 ��.(=�<hi��`73 ��Ng3���� NL:.��`<30�����y� ^_� `> -+E� ��N3���� NL:.��`<30�����

pow#;3���� ������`<���.(���30�����

// PRE: b != 0.0 || e >= 0

3�����+ :�+ 3��. �3e� :�+E3 pi���.���������[ �30��a[� #v����e_��N

e��+ �����[ �3��~a[�)g"3��. �3

b�= 0

�D:�+E3 �����(y� bc����C��+E30`�����(.�~3������

// POST: return value is b^e

3�����+,:.+,3����!NL:���`<3������ a- -�:�� #�(��<�C����(������ ��� 3���� � ��� ����<3��<�>� ^_� 3�����+,`> -+0� #�3����<��� ��+c��� �<h ��`<3>�bc���D�.�0���B ��.( �i��+E3�`�����(���3�������+B+E�i��`���N�� 3���� NL:���`<3������=��� d�d �3������d �3���`> -n+0����+0����S 3 T.�0+E3

+0������3 # NL:��.`73�������+ &V��30� a- -�:���+ ,.#�B �<h ��`<3 �!(�� ����3 T�3 ����3��Z3����dN��� -���7&,���0/ ��Nc�d �3������d �30���`> -gNL:.��`<30������+ &V����`�� ���.~� �. >a[�6a- -�:���+<� �g:;3 :�+0����� 3�����`�����`��<��3 ��N (0=>!�@=�,.8 �>�J,5�<� � ek{*�<`��3���������� �*�98.g�# 5cW"WHNL:.��`<30����� `� -� pi��`�����+0��(��<����(z -+ Z�d �3������d M3���`> -vNL:���`<3������ 3��. �3 �d M� +���������� -��+E3� M3���+ e ��������(��L �3��<�� S���K�!$=�� 3���� NL:���`<3������ `> -�-gB3������������ -��+E3� �30��+ e_��������(��L �3���~�, K>�<��= 3����"NL:���`<3������ `> -�-g7�

�%��(��<� 3�����+ �C������3 ��NXaF���<& #j3�����.�0��`�����(���3������ +E�C��`��~T �<+ 3���� B !$8G,.�/# ��N%3�����NL:���`<3������ #3����+0�<3 ��NX���������� -� +E3� �3���+D��� &V����`�� 3����NL:��.`73������z�d �� pC�d`> �����(y� ^_�z`� -+0����N

pow#23�����+0�

����D -� �.�0������ -� +E3� M3���+R��� &V����`�� 3���� � ��� -���73��<��+b -��(

e ���� ��� �+0:���3� �p.��!����� �3������y�"bc���

�C��+E30`�����(.�~3������ (���+0`<���~pC��+R3���� NL:���`<3������ ��3�+0�<�Njp�� +G�C��`���N��*����� ���'& 3����Ye ������<a- -��3"� ��03 ��N23����)g���������� -�l+E3� �3�� ���<3�+ 30�� -��+0NL�������<(n� ^_� `> -+0�D��N

pow#y3����D���73�:;���=a- -�:��

be &V��� e 3����6�i���� �����~� gpC�R�.:�3% �3X+0�����R���������0� ��*`> M3������y�

� �%�(� � ��'�'�A!9 � �������� 37 � ������( � -�� � ���������=� ���� $(��'� �� �� �@ � � ��� )9 8� : C � �� :�������)��� ��������� :8��'���BA!G �?$��� � �6���� � ���� � �7�� ��E���'#> ��8 �! :F37 � ������( $(��'� �� C ��� �����A � �6�� "����5$(��'� �������� �'#��� � 3������ �� 1��$(��'� ��6����! �=3?����37 � �������! C �#�� ��������=�# � �6� ��� � ������)G

Page 116: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

���>P ������� ����� �q�� ��� � � � ���

b�� +0:����d ���� � � #g3������C��+G3�`�����(���3������43��<��+ :�+�&V�. �3 �. ����C����+6&V�����w3����Z������`�����(���3������z��++� �30��+ET.��(y� AB�Z3����"��30�.�7�V�. -��(�#�30�.� �C��+E3�`<���.(���30����� ���~a[��+ # !Y@$:u,.=�,.#0�<�h� 13�4,5�V��!�>p���= NL���X3����`> -+E�"&V���<�0�"3����"�����<`�����(.�~3��������+%����3X+� �3���+GT �<(n� F����� �d �3������d M3���`> -.�C������3X��N aF���<& #;3�����+,��+T.��� �g NL:���`<3������ ��+X+E���6�.��6����3X(.�7T ����(�NL���%� ��� -���73��<��+ ��:;3�+0��(.� ��3�+,(����d -���y�

Arithmetic pre- and postconditions.b,��� `> �����NL:���0�> -(��<�B��Nj{*��`<30����� �*�JI ��������3%�. �a[� ���> ��� � ��(

3��. �3�pC��30�w������� -��(��C��+G3�`�����(���3������ ��NB3���� NL:��.`73������pow

`> -������36pC� `����E����`<3>� ^_Ne��+63��*�

L ��0��� # NL���d�7u� ��6� �� #g3����Z`����6�.:;3� �30�����z��������3 �'a[�<� !.�'& # p.:;3�+0:�`��e M��� ����36�7uF`��:�(���(�p��

3���� ������`�����(���3������n�X1va[���=��Nv3����<�0� ��+V�����Ma[�7� !.�M& # 3���� a� ��:�� �� -����� ��Nv3���� 3k�*�C�double

�d ���. �a[�Z ������� M3

be #g���> -�������Z3��. �3 3�����+ a- -�:��d`> -������3 pC�d���<30:��0�.�<(zp*� 3����NL:.��`<30�����y� b,����C��+E30`�����(.�~3��������+ 3����<����NL�����"���6������`���+0� -+c&,�<�_�^_�Z3����!`�����3��7u*3V��Nv ��0��3������<3���`B���i�<�� �3������.+,�'a[�<�V3����"NL:.��(. -������3� -n5cW"W 3k�*�C�<+ # �~3%��+X��N�3����

3���(�����:�+c -��(Z�<a[�<� :.��(���+0�~�� �p.��B3�� &X����3��R(��'&V� �����<`���+0� �.�0��� ��.(�C��+E3�`<���.(���30������+>z*&,�" -����> �(��/F���'& &V��� �6NL:���(. -������3� -j3k���C��+ �d ��=pC���. �a[�d(���hi�<�0����3�~� ��� (���h �<������3 � � �3�NL������+�� ;��� �7u � -�6�.�� #�3�����+ ��+c -�i&,�R`���:��(������`���+E����d+� ��NL���,3����"NL:���`<3������

pow#F&V��3�����:;3 /F���'&V����� -���*3��������

+E�C�<`���T.`! MpC��:;3c30�.�R3k�*�C�double

// PRE: b and e are such that the computations below return

// a finite double value x

// POST: the return value x is the value returned by the

// computations belowAVp*aF����:.+E�� #.30�.��+%(���+0`<�0����3������ ��+X�.��3%a[�<�0� ������.NL:�_�cb,�.�7����NL����� # &,� ��N�3���� `����;T.��� ��:;��+0���a[�<+%3���������n ��.( �C��+E30`�����(.�~3�������+ 3��. �3 (.��`�:�������3���:;� 8�,5�V�;�>8G,5���J�h,5* ����30����3������ #�p :;3 &,� �. �a[� 3��V/[���<���� ������(3��. �3c��� ���> -��~3s� #�3����"NL:���`<3������ ��������3 pi���. >a[�"(���hi�<�0����3�~�[�

3.1.2 Function definitionsb,�.� +E�*��3� Mu���N NL:���`<3������ (.�7T ����30����� ��+% -+cNL�����'&V+<�

� � �� � � e � � � �� � �L� #�� � � �� � � � #y���~��# ��� � �� � ��� g� � � ���

b,�.��+X(��<T.����+X DNL:���`<3������ `> -����( � �� � � #F&%��3�� =>� ��:4= #U��D (I� �# ��.( &V��3�� K�!$= 8G,5*4(;,.=�,.8�� �<�>=)�� �� � �L��#�� ��� # � �� � ���|��N 3k�*�i��+ � ��#����<� # ��� #� -��(�&%��3��Z Kh:4# � ���"!$#QS>!�B.D � � � ���i�{��F��3� -`<3���`> -��� # � -��($����#~����� # � �U ����23k�*�C�j� �����+ # � � � � -+n&,���� -+ � �� � � ��#�� ��� # � �� � ��� ����%��(�����3��~T �7��+�e {*��`<3������ �*�����9#.g�#� -��( �

� � ���Z��+ p.���`�/ #F +0� �*:�����`��B��NC+G3� �3������<��3�+j����`����+0��(�p��`�:;����dp��� -`<��+ e {*��`<3������ �*�@?;�98.g �� �X`> -�63������;/ ��N 3����XNL�����d -F� ��� -���73��<��+2 -+2� � -`��������(��<��+ NL���j3����V -`<30: ��� ��� -���<3��<�0+ 30� M3

���� +0:;���.�����( (.:;�����.� NL:.��`<30������`> ��_� ;:.��`<30����� (��<T.����3������.+j� :�+E3,����3c ����C�� ��,����+0��(��%p.���`�/*+ #F��3����<�cNL:���`<3�������+ #*���,`�����30�0��C+E3� �3����

������3�+�� bc���<� �d ��B ����C�� ��n����+0��(��v�. -����+E� -`��<+ #>3�����:.����#'��� �3n�����p -�+0`<���C� #M���/[�v���callpow.C

�S ���������� -� �d ��D`�����3� -���d -�d ��Ep �~30�� ��0� �*:�� pC�<�j��NCNL:��.`73�������(��<T.����3�������+ #� ����C�> M�������!�����B -N�30�<� -����3����<�c&V��30�.��:;3X -��� (����������3��<�0+ pC�<3k&,�����Z3������ �j^_�ZN -`73 #.30�.�R���������� -�

callpow.C`�����+0��+G3�+

��N ��1b! NL:���`<3�������(.�7T ����30������+ #F+0����`��R3����main

NL:���`<3������Z��+c DNL:���`<3������ -+,&,���_�

Page 117: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� ���'o

3.1.3 Function calls^_� Kv�������� -��� � #

pow(2.0,-2)��+c�����"��NnT.a[� NL:���`<3������Z`� -��+�� ;�����d ���� #� DNL:���`<3������ `> -�y��+c -�

�7u*�.�0��+0+0�����y�b,�.� +E�F��3� Mu ��N, NL:���`<3������ `> ��230� M3!�d �30` ����+ 3���� �������<�� -gNL:���`<3������=(.�7T ����30�����N������ �pC�'a[�"��+% -+cNL�����'&V+<�

� �� � � e � ��� � ��������� ��#n�~����# ����� � ��������� � g

$%�<�0� # ��� � � ��������� ��#~����� # � ��� � ��������� �x ��0�g�7u*�.�0��+0+0������+v��N*3k���C��+�&%�.��+E�ga� ��:���+�`> �� pi�g`�����a[�<�03���(3��d3����D3k���C��+ � ��#��7�>� # ���"�yb,����+0�D�7uF������+E+0������+ ��0�D3���� �h,5*[* (;,.=�,.82�>�<�>=)� � ;��� -� 3s���C��+R&,�/F���'&Y+E�6N �� #.3����!`> -�y� ��� -���<3��<�0+% -+c&,��� -+X30�.�!NL:.��`<30�����Z`> -� ��30+0���N� ����"�Ea� -�:.�<+��cbc���"3k���C���Ny3���� NL:���`<3������ `> ��i��+ 3����RNL:���`<3������0y@+ �0�<3�:;��� 3k���C� � � � �d ��6pC�V30�.�R+E�i��`��L -i3k���C�

voide_+0���

{*��`<30����� 8F���<a[����( � pi����'&bg ��� &%����`��Z`> -+0�R3����!NL:���`<3���������+c`> -����(Z p�!$� B5HTK�:N# � ���J!$# ����.�<� NL:��.`73������ `> ��R��+��<a- -�:. �30��(�#V3����=`> -� � ��� ����<3��<��+ ��0�=�<a- -�:. �3��<( T.�0+E32e ���U -�

����(��<�B3��. �3V��+V:���+E�C��`��~T �<( p��Z3����D5cW"W|+G3� -��(. ���(Ng7�Bb,��� ����+0:��3����.� a� -�:.�<+R ���� 3������ :�+0��( 3��������3��� -�� � � 30�.�jNL�����d -�� ��� -���73��<��+�� ����. -�~� #'30�.�gNL:.��`<30�����!pC��(��"��+ �7u;��`<:�30��(0z����!3�����+�� u;��`�:;3������ #3����BNL�����d -.� ��� -���<30�<��+jpi���. >a[�R��~/[�%3����<�6&,�<�0�Ra- ����� �p.���+ (��<T.����(����3����VpC��������������� ��N � � � ��� #������3��� -�� � �<(6&V��3��3���� a- -�:���+c��N�3���� `> -�i� ��� -���<3��<�0+��bc��� �<a- -�:. �30�����Z��N2 ����� �_a[����( NL:���`<3������ `� -� 30�<�������. �3��<+% -+%+0�*��� -+B D���<3�:;��� +E3� M3���������3

��+,���> -`�����(�#�+0��� {*��`<3������ �*�������>8F�2b,����+ ���<3�:;���Z+G3� �3������<��3c� :�+E3,pC� ��N�3���� NL�����

return� ��� � ��������� z

&V���<�0� � ��� � ��������� ��+c -��7u*�.�0��+0+0����� ��N !3k�*�i�R&%����+0�Ba� -�:.�<+c`� -� pC�R`�����a[�<�03��<(�3�� 3����B���<3�:;���3k�*�C���g�ib,��� ����+0:��30�����6a� -�:.�!��+V3����!a- -�:�� ��Nv3���� NL:.��`<30����� `> -�_�%bc��� �<h ��`<3 ��Nv3���� NL:��.`73������`> -� ��+j(.�73��<����������(6p�� 3����grs������3 �<h ��`<3�+,��Ni3����V`� -� � ��� -���<3��<�j�<a- -�:. �3������.+ #* -��(d��NC�7uF��`�:;3������� � � ��� �bc���XNL:.��`<30����� pC��(��D�d �� `�����3� -���6+E�<a[�<�� -.���<3�:;��� +E3� �3��<������3�+ #[p.:;3j��Ni���"���73�:;���6+E3� M3���������3��+ ���> �` ����(�(.:;�����.� 3���� �7u;�<`�:;3���������N � � � ��� #Fa� -�:.� -��( �<hi��`73%��N� ����� �_a[����( NL:���`<3������ `> -�y M���:���(.�7T ����(y�

;��� �7u� ��6� �� # (�:;�������3����6�7u;�<`�:;3������ ��N � � � ��� ��� pow(2.0,-2)#b ��.(

e������30�L -���Z� �a[�

a- -�:���+2 -��(

−2� b,�.�<+0��a- -�:���+ ����` �. -������( ��� 3����

if�_+E3� �3��<������3 3��

0.5 -��(

2#jpC�<NL�����

3�����+E:�p.+0� �*:�����36��*��� +E�<3�+result

3��0.5

���4�~3�+ T���+E36 -��(z3��0.25

���4��3�+ +0��`�����(w -��( L �+E3��3��7�� �3������y� b,�.��+Va� -�:.� ��+B���73�:;������( -��( pC��`������<+V3���� a- -�:�� ��N 3����DNL:���`<3������ `> ��v�7uF�����<+0+0�����pow(2.0,-2)

3.1.4 Functions and scopeb,�.�D� �������3�����+0� � �<(=� ��03"��N dNL:.��`<30����� (��<T.����3������ `�����3� -����+ 30�.�D(���`�L M�� �3�������+B��Ng30�.�DNL�����d -� ��� -���73��<��+�� ;��� �����N*3������ #>3����2(.�<`�L ��� M3���a[�v�����������"��+C3����jNL:���`<3������ (��<T.�.�~3�������#>+0�X30�.�2NL�����d -� ��� -���73��<��+c�. >a[� ��*`> -n+0`����i�Fek{*��`<30����� �*�@?;�98.g �,bc���!�C��30����3��� - +E`����C� ��N NL���0�d -n� ��� -���<3��<�(���`�L M�� �3������dpC�������.+X -N�3��7�%3���� (.�<`�L ��� M3������Z ��.(��7uF3��<�.(�+X:.��3���i3����"����(Z��N�3����!NL:���`<3������ pC��(��[�

Page 118: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

���># ������� ����� �q�� ��� � � � ���

b,�.�7����NL����� #;3����RNL�����d - � M�� -���<3��7��+, ����R����3 aF��+E��p.��B��:;3�+0��(��V3����RNL:��.`73������(.�7T ����30�����y� � �~3������3����RpC�*(;� #F3���� NL�����d -i� ��� -���73��<��+ pC���. �a[�!���/[�Ba� ��0�L �p.���+ 3��. �3X ����"��*`� -i3�� � � � ���i�^_� � M�03���`�:�L M� # `��. -������+B�d -(��R3��63���� a- -�:���+V��N NL�����d -y� ��� -���73��<��+ e_���/[�"���Z3���� NL:��.`73������pow

gg ���� �E���+E3�� -N�3��7� 3����VNL:���`<3������d`> -�i -��(d�. >a[�B��� �<h ��`<3,����3����Va- -�:���+ ��NC3����V`> �� � ��� �� ��<3��7��+��2bc����+2��+j�.��3j+0:;�0������+E����� #�+E����`��X3����c`> -��� ��� -���73��<��+2 ����c�0a- -�:���+ #[p.:�3j3��!�d M/[�c3����,�C������3`���� �� #;��<3X:�+X`<���.+E��(��<�X30�.� NL�����'&V���.�D -~3��<���. �3��~a[�

mainNL:���`<3������Z���

callpow.C�

int main() {

double b = 2.0;

int e = -2;

std::cout << pow(b,e); // outputs 0.25

std::cout << b; // outputs 2

std::cout << e; // outputs -2

return 0;

}

b,�.� a- -�:���+B��N 3���� a� M���L �p.���+b -��(

e+E3� >��3����D+0 -���!3��;����:�������:;3 # +0���.`<� 30�.� NL:���`<3������ pC��(;�

��Npow

��+V����3B���Z3������~�V+0`����i� #iNL���B3k&,� ���> �+0����+�� ����0+E3 # 30�.�!(.�7T ����30�����Z��Npow

M�.�i�> ���+ S���K�!$=��3����D(.�<`�L ��� M3�������+R��N

b -��(

e#n+0��3���� pC�*(;� ��N

pow`� -���.��3"�<a[��� pi� ��� 3���� (I!.�<��#0���",5* +0`����C�

��N�3�����+E�"(���`�� ��� �3������.+<�g{*�<`�����( #��<a[�<� ��N &,� &,��:.�( ���'a[� 30�.� (���`�L M�� �3�������+,��N 30�.�Ra- ����L �p.��<+b -��(

e3�� 3����"pC�������.�������D��N 3����"���������� �� e pi��NL�����!3����"(.�7T ����30��������N

powg�#�3��������V+E`����C�"&,��:��(

�7uF`��:�(�� 3���� pC�*(;� ��Npow

#C+0����`�� 3��. �3Vpi�*(;� ��+B��� 3���� �C��30����3��� -�+0`<���C��+R��Nv����(���`�L M�� �3�������+V��N3���� � �����+

b -��(

ee 30�.� NL�����d -i� ��� -���<3��<�0+ g�#F+0�<� {*��`<30����� �*�@?;�@8F�

{*����`��B3����BNL�����d -.� M�� -���<3��7��+ ��N NL:.��`<30�����d� �a[�R���`> -i+0`<���C� #F3����<�d ��+0� �. �a[�" �:�30���d �3���`+E3����� -��� (�:;�� �30�����Qek{*�<`<3������ �*� ?;�98.g7� b,�.��+ ���> ��.+ 3��. �3D&,�����736 �EN�����+0� � +0�736��NVNL�����d � � ��� -���73��<��+,�<a[�<�E�*3������B3����RNL:���`<3������Z��+c`� -����(�#*&%��3�� ���������0�� �+0+0��������(3�� 3������\������d:���30��i3��������+G�C��`<3��~a[�!NL:���`<3������ `> -�C3��<�0�����. �3���+�� % -����+n(���`�L M����( ����+0��(.�v3����jNL:.��`<30�����!pC��(�� �D:�+E3 pi�j(���+E30����`<3nN������ 3����j� �����+y��N; -�[NL�����d -

� ��� -���73��<��+ # :��.���+0+B3����<� ����C�� ��R��� 6����+E3���( p.��*`�/i� b,����+B�d �/[��+V+E����+0� +E����`�� ��3����<�0&%��+0� #i�~3&,��:��( pC� �i��+0+0��p.��D3�� ���0���7a[�*`> �p.�� ����(�� 3����6�. -��� ��N, ZNL�����d - � M�� -���<3��7�>�bc���<���<NL����� #v&,�`> -������3c&%����30�

int f (int i)

{

int i = 5; // invalid ; i hides formal parameter

return i;

}

p.:;3X&,� `> -��&X����3��

int f (int i)

{

{

int i = 5; // ok; i is local to nested block

}

return i; // the formal parameter

Page 119: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� ���>q

}

b,�.� � �303��<� NL:.��`<30����� ��+�3���� ��(�����30��3k� #�+0����`�� 3���� +0`<���C�,��N�30�.�,(���`�� ��� �3������int i = 5

��+v������~3���(3��D3����"�������<�,p.��*`�/ �

Function declarations.S NL:��.`73������ ��3�+0�<�N, -�+0� �. -+ Z+E`����C� #2 -��( 3�����NL:��.`73������ `> -� ������=pC�

`> -����(�&%��3��������~3�+%+0`<���C���Xbc��� +0`<���C� ��N NL:���`<3������ ��+%��p�3� -���.�<(�p*��`����Dp.��������� 3����!+0`<���C��+B��N -����3�+ B ��� *-,.=�,5���"!$#0� � bc��� � M�03R��Nj3���� NL:���`<3������ (��<T.�.�~3������ pC��NL����� � � � ��� ��+ �(���`�L ��� �3�������#p.:;3c30�.�7���R�d >� pC�"NL:���`<3������ (���`�� ��� �3������.+ 30� M3,� �a[� ��� +0:;p.+0� ��:�����3 � � � ���i�2b,����+,��� `<����30�� �+E33�� a- ����L Mp ���+g&V���<�0�B�<a[�<�0�d(���`�� ��� �3���������+ �3 30�.�B+0 -���%3������% !(��<T.����3������y� S NL:���`<3������ �d ��DpC�(���`�L M����(Z+0�7a[�<�� -y3�������+ #*p.:�3X��3c`> -� pC�"(��<T.����(Z����`��"������[�bc��� NL�����M&%�����D���������� �� # NL���B� u� -�6�.�� #.(��*��+%�.��3V`����6�.���� #;+0���.`<� 3���� `> -� ��N

f���

main��+

����3%��� 3���� +0`����C�"��Nf�

#include <iostream >

int main()

{

std::cout << f(1); // f undeclared

return 0;

}

int f (int i) // scope of f begins here

{

return i;

}

�g:;3B&,� `> -� �.:;3f����3��63���� +0`<���C� ��N

mainp*� -(�(������� 6(���`�� ��� �3������ZpC��NL�����

main#C -��( 30�.��+

�F�����(�+c a- -���(���������� -� �

#include <iostream >

int f (int i); // scope of f begins here

int main()

{

std::cout << f(1); // ok , f is in scope

return 0;

}

int f (int i)

{

return i;

}

Page 120: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� ��] ������� ����� �q�� ��� � � � ���

3.1.5 The type void^_�w5cW"W # 3����<�����+ NL:���(. -������3� - 3k�*�C�`> -����(

void# :�+0��(w -+ ���<30:��0�43s���C�NL��� NL:���`<3�������+

3��. �3R������ �. �a[�D -� �<hi��`73 #Cp :;3R���da� -�:.�-�"SV+ -� �7u; -�6�.�� # `<���.+E��(��<�R3���� NL�����'&V����� ���������� ��e_����3�� 3��. �3d3���� NL:.��`<30�����

print_pair��� ��:�������+��� ������`<���.(���30������#X+0���.`<� ��3d&,���E/F+NL���Z -���

`���� p.���. �3������d��Nint

a- -�:���+ g7��

#include <iostream >�

�void print_pair (int i, int j)

�{

�// POST: "(i, j)" has been written to standard output

�std::cout << "(" << i << " , " << j << ")\n";

�}

int main()

���{

� �print_pair(3 ,4); // outputs (3, 4)

���}

bc���!3k���C�void

� �+%���6��3k� a- -�:�� �� -����� # -��(Z3����<��� ��0�!���6���30�<�� -�+ #�a- ����� �p.���+ #����VNL���0�d -NL:���`<3������ � ��� ����<3��<��+��N!3k�*�i�

void�Hb,�.�7��� ���� �7uF�����<+0+0������+Z��N 3k�*�i�

void#B3�����:�����#RNL���

�7u; -�6�.��print_pair(3,4)

�QB�<T.�.�~3�������+v��N a[����( NL:.��`<30������+j(��!����3 ��� ��:������X R���73�:;���6+E3� M3���������3 #�p.:�323����<�D�d �� `�����3� -���

���<30:��0� +E3� �3���������3�+ &V����+0� � ��� � ��������� ��+ �<��3����<� ���6��3k� #v��� ��Nc3k���C�void

� 1 a- -�:. �3������ ��N% a[����( NL:���`<3������ `> -� 3��<�0�����. �3���+c&V����� 3���� �7u;�<`�:;3������ ��N � � � ��� ��+%T.����+0����(�#i���V&%�����= D���<3�:;���+E3� M3���������3X��+,�0�> -`�����(y�

3.1.6 Modularizationb,�.�7��� ���� NL:���`<3������.+c3��. �3B M��� 3� -������ � �d -(��BNL���R +E�C��`��~T `"�.�0������ -� #. -��( ��3%&,��:��( ����3V�d M/[�+0����+0�X3�� :�+0�%3������t���d -����3����<�2���������� -� ���g:�3j3����<���% ����V ��+0� �������<�� -.�.:;�0�C��+E�%NL:���`<3�������+j30� M3 ����,:�+0��NL:�����D�d -���"���������� -��+���^ 3 ��+ `���> M���� :���(���+0���� �p.�� 3��R`����*� 30�.�,`����E����+E�C����(������RNL:��.`73������(��<T.����3������Z����3��� ��������������� -� 3��. �3%`> -��+c3���� NL:���`<3������0z &%�. �3V&,� ������( ��+V 82!�B.:4* ,.= ���5,5���J!$# # +0:;pC(���aF��+E����� ��Nn3���� ���������� -�\����3�� ����(��<�C����(�����3,� ��030+��bc���V�C�'&,�<� NL:���`<3������

powN������OKv�������� �� � �!��+ `��7�03� -������ ��NC�������<�� � �.:��E�C��+0���2^_�d����(��<� 3��

�d �/[� ��3B >a- -��� �p.��!3�� -����:��R���������� ���+ # &,� `> -� +0���6�.���.:�3B30�.� NL:���`<3������ (��<T.����3������ ����3��d +0�<� ��� �3��!+E��:��0`��!`���(��"T.��

pow.C#.+� �� # ������:��c&,���0/*����� (�������`73����0� #� -��( ����`��:�(��B3�����+,T ��"N������

��:;�%�d �����Kv�������� �� �>8F�

�// Prog: callpow2 .C

�// call a function for computing powers

�#include <iostream >

�#include "pow.C"

Page 121: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� � �F�

�int main()

{

std::cout << pow( 2.0, -2) << "\n"; // outputs 0.25

���std::cout << pow( 1.5 , 2) << "\n"; // outputs 2.25

� �std::cout << pow( 5.0 , 1) << "\n"; // outputs 5

���std::cout << pow( 3.0 , 4) << "\n"; // outputs 81

���std::cout << pow(-2.0, 9) << "\n"; // outputs -512

���

���return 0;

���}

Program 13:(0=>!h@.� �_�h,5*[* (;!$1 �;W r

SV�Z����`��:.(��R(�������`73���a[� ��N 3���� NL�����

#include��� � � �� � � �

�������`� -��� ���<�.L �`���+�3���� ����`��:�(��Z(�������`<30��a[�Zp*� 3���� `�����3�����30+��NR3���� +E�C��`<��T.��(�T.��-� �%+E: ���� #� � � �� � � ��+c����3��<�0�����<30��(������ �3���a[�B3��D3���� &,���0/*����� (����0��`<3����0�[�

Separate compilation and object files.bc��� `��*(�� +0�<� ��� �3������ ����`��. -����+0� N������ 3���� �����<a*����:�+

� ��� -���� ��.��. -+,�����B�d -rs��� (;�� �&%p -`�/ �v3����B`����6�.����<� (��*�<+c����3 �E+0�<� � �~3>���g��NL����� `����6�.��L �30������#pow.C

��+g�������`> -��� `����.����( p -`�/6����3�� 3����%�d -��� T.�� #�+0�!3����X`����6�.����<�2+E3������ �+j3�� 30�� -��+0L M3��c30�.�NL:���`<3������ (.�7T ����30����� ����3���d -`�������� L -����:. -��� �>p���= D ���[82� ��3 `����6�.����<+B d���������� -� 3��. �3 `> -��+pow

�gb,����+,��+% &c -+E30�"��Nn3������V3��. �3X`> -��pi�! �a[����(���(�p�� ���J(;,.=�,5�<�Y��!$89(0��*-,5���J!$# �mn�73�:�+�d �/[� -� -�. -������43��z����:�+E30�� M3���3���� +0��3�:. �3������n� S NL:���`<3������ ��+d���/[� `����*�*�����

�d -`��������j3��. �3��.�0�Ma*��(���+v+0�<�0a*��`���+ NL���j X�C��30����3��� -��� L ��0��� �*:��Dpi�<� ��N.`�:�+E3������<�0+ e 3���� ���������� -��+`> -��������3���� NL:���`<3������Ng7� ^_� 3�����+ -�. -������ #y`����6�.������.�630�.�DNL:���`<3������ NL��� � ��030��`�:�L ��B���������� ����+V���/[�!+E3� ��03������6:;� 3���� �d -`��������!NL���R D� M�03���`�:�L M�V`�:�+E3������7�>�V5 ���6�.�������� 3����!���������� �� ��3�+0�<�N��+X���/[�"p����� �/F�����6(��'&V�Z3����"`�:�+E3������<� y +%����(��<�%����30�6+E3��<�.+3v�&X����3030���Z(��M&%� ��� NL����� NL���V3�������C�<�� �3����"v�3��. �3X ��0� �E:���(��<��+E3� ��.(. �p.�� � 3��D3����!�d -`����������� ����. -�~� #;�7u;��`<:�30����� 3����"���������� -�\��+���/[�B��:����������D30�.� �d -`��������B3��D������`���+0+c3����"���0(.�7�>�{*����`�� 3����D+G3� ��03 �_:;�=�C�<�0���*( e_`����6�.��� �3�������30�����)gX�d ��ZpC����:.�~3�� ������ #i3���� `����*� +0�����=&%���

��p*a*����:�+0�������3,+E3� ��03c:;��3����R�d -`��������V�<a[�<�0�d3������B �.�7&)`�:�+E3������<�c ��E����a[��+ #Fp.:;3,����`�� ���.~�����3���� �������������;�{*������L M���� #;&,� &,��:��( ���/[� 3��d`����6�.����" �NL:��.`73������ ����`�� ���.~� #i�. >a*��������3B���> �(��ZNL���":�+0� p��

-��� ���������� -� 30� M3D&c ���3�+ 3��=`� -�,��3>� bc����+D`> -�z����(.�<��(zpC� (.������� ^_�4��:;�6`� -+0� #g&,�d&,��:��(`����6�.���� 3���� T ��

pow.C+0�<� ��� M3�����[�R� � ������Z�. �a[� 3��d3�����30�.� `<���6� ����<�%30� M3R��3R+0����:��( ����3

�������<�� M3�� -���7uF��`�:;3� �p.��B���������� �� e_��3,`> -�0y 3 #;+0����`��B3����<��� ��+,���main

NL:���`<3������4gjp.:;3X -� !�S � ���>���!LB � T.�� # `� -����(pow.o

#i+� ��[�B^_� 3���� `����*�Z+0�����= �� ������� # +G&V��3�`��������6��� 3���� �d -`��������"��� 30�.��������������d(��*��+ ����3!+0�7�0a[� `�:�+E30�����<��+R�[�<3!p.:;3!�<� Mp ���+ 30�.�D+0����� 3�� +0�<�0a[� 3������ N �+E3��<� &V�����3����<� ��0�0��a[���

Page 122: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � ������� ����� �q�� ��� � � � ���

Header files.^_�Z&%���~3������ (��'&V��30�.�"`�:�+E3������<�>y@+c����(��<�VNL���X3����!���C�<�� �3���� #;3����!�d �` �������R��+X�.��3

�[�<3X������(���(y� b,���"`���<�0/������d������(�+c30� /F���'&U3����"`<����30�����+c��N 3���� �d �` �������B��������(��<�,3�� p����> M/(��M&%��3���� ����(��<�%����3��D+E3��<�.+c3����"�d -`��������B`> -��(.�;�{*������L M���� #F&V����� ���������� �� `> -������� 3���� NL:���`<3������

pow��+B`����6�.�����(�#;3���� ��p rs��`73R`��*(�� T.��

pow.o��+v����3 �[�73j�����<(.�<(n� b,��� `����6�.����<�������� ������(�+ 3��B/*�.�'&43���� (���`�� ��� �3������ ��N�30�.� NL:���`<3������

powe �G3����6`�����30�����+ �5g �Zb,�.�<� 3����6`<���6� ����<�Xe �G3����6`���7�0/ �5g"`� -� �������<�� �3�����p.rs��`<3 `<�*(��Re �G3����

���C�<�� �3����cNL����� �5g -�+0�DNL���%30�.� `> -������� ���������� -� �bc���,NL:���`<3������D(���`�L ��� �3������ ��+ �.:;3 ����3�� V+0�<� ��� �30� T ��, -+v&,���_��^_� ��:;� `> -+E� #�30�.��+�T.��

pow.h#

+� �� #���+,a[�<�0� +0�����03 z;��3X`�����3� -����+vrG:�+E3c3���� �������+

double pow (double b, int e);

// PRE: e >= 0 || b != 0.0

// POST: return value is b^e{*����`�� 3�����+v��+ 3���� �E�.�� -(��<���R��N;3����cNL:���`<3������

pow#�3���� T.��

pow.h��+ `> �����(D �;�h,cB ��= { * � � ^_� 3����

`> -�������DK �������� -� �>8 #;&,�"+0���6�.��6���7� � -`��"30�.�"����`��:�+0�������Npow.C

p*�3����"����`��:.+E��������Npow.h

� F����� 3����V���������� -� #[3����B`����6�.����7� `> -�d3�������������<�� �30�R -� ��p.rs��`<3,`���(��VT ��

callpow2.o�2my��/[�

��� 3����6`������ +0����� -�. -������ e �G&%���~3�������(��'&V� 3���������(��<���5g�# 30�.��+"&,���0/*+ �<a[���z��N 3�����`����6�.����<�(��*��+c����3X/*���M& �pC��:;3,3����RT ���+

pow.C���

pow.o�

The linker.AB�.~�D&%����� 3����c`�:�+E3������<� y + ����(��<�g��+2������`���+0+0�<(� -`�`����0(.���.� 3��R3����X���C�7�� �3����2NL����� #

3����D�d -`��.���.�!`�������+R����30��.L ��[� ^ 3 (��*��+ ����3 �<a[��� �d �3030�<�B&V����`�� �d -`��.���.� ��+" �`<3�:. -���Z:.+E��(�# -+c������ �+X��3X`> -� �C�<��NL�����\3���� +E3��<�.+X&X����3030��� ��� 3����"���C�7�� �3����XNL����� �{*������L M���� # ������ &%�����w -� �7uF��`�:;3� �p.���.�0������ -� ��+ p.:����3 N������

callpow2.o# 3�������p.rs��`<3

`���(.�RT.��pow.o

`<������+,����3�� �.L ��[�j} ��a[��� 3����"��p.rs��`<3cT ���+ #F3���� *P�[#0Zw�>= p.:.���(�+ 3����"�7uF��`�:;3� �p.������������ -��p*� ���:.���.� 3������<3����<� �d �` ������� L -����:. -��� `���(��6NL��� NL:��.`73������ `> -��+ e_���

callpow2.og

&V�~3��d�d -`��.���.�XL -����:. -���V`���(��BNL���c30�.�B`<���0����+E�i���.(������ NL:���`<3������d(��<T.����3�������+ e_���pow.o

g7�2^_Nn&,�(�� �.��3!&,���0/ &V�~3�� +0�<� ��� �30��`����6�.��L �3������ #C3����������/[�7� +E3����g(��*��+ 30�.��+ ���:������ #�p.:;3 &,��(.���0y 3����3���`��R��3X+0����`��R3���� ����;/[�<�c��+c��� 3��. �3X`> -+E�"(������<`<3����30�0�������<����( p*�d3����"`<���6� ����<�>�{*�<� ��� �30� `����6�.��L �3������ ��+ a[�<�0�w:�+0��NL:�_�U^ 3 ����'&V+ 30� ` �. -�����Z3����Z���6� ���������3� �3������ ��N

NL:���`<3������ &V�~3�����:�3 �. >a*����� 3�� ����`����6�.����� +0���.��������������� -� 30� M3�`> -��+6��3>� S%+������� -+63����NL:���`<3������ (.�<`�L ��� M3������ �����d -���.+ :���`��. -������(�#j��3 ��+D������ 30�.�����;/[�<� 30� M3 �. -+ 3�� &,���0/ ��� 3��������(0zi -��(�30�.�"����;/[�<�%��+%:�+0:. -�~��a[�<�0�ZN �+E3>�c^ 3%NL�����M&%+c30� M3V+0�<� ��� �3��!`<���6� ��L �3������d ��+0�6�d �/[�<++0����+0�"NL���VNL:���`<3�������+ 3��. �3% ���� +E�C��`<��T.` 3�� ����� ���������� ��H������[�{*�<� ��� �30�D`<���6� ��L �3������ ����`��������� !.��`<3�+B3���� �E`�:�+E30�����<���6aF���<& ��N 3���� `> -�����.� �.�0������ -� �X -+

������� -+V NL:��.`73������ (��*��+V&%�. �3V��30+X�������c ��.(Z�i��+E3�`�����(���3������ �.�0������+0� ���Z3���� ���> -(��<�VT.�� #.��3%��+����3 ���6�C���E3� -��3 3�� /*���M& �;!$1 ��3 (�����+ 3�����+��2AB�30�.�%��3����<�,�. -��( #���Ni3����BNL:���`<3�������(��<T.����3������ ��+�E����(�(���� �6N������ 30�.�!`> -�����.� ���������� -� #�`���> -� �������, ��.(Z�i��+E3�`�����(���3�������+X ���� ��Nv`7����3���`� -y���6�C��� �3� -��`���#.+E����`�� 30�.�7� �d ���pC�R3���� ���.~�� �a- -��L Mp ��B����NL�����d �3������d MpC��:;3c30�.� NL:���`<3������0y@+,pC���. �aF�����>�

Availability of source code.^_N �[��: �. �a[� `> �����NL:��~� ������� 30���0��:.���w&V�. �3�&,� �. �a[� (������ +0�

N �� #��[��: ���> -�� � �R3��. �3X&,�"`���:��( �����������.`<���.��R(.�<��<3�� 3����!+0��:;��`��!`��*(��"T.�� pow.C �N�3��<�V�. �aF���.��������<�� M3���(pow.o

#i+0���.`<� L �3��<� # 3���� NL:���`<3������ (��<T.����3���������+V����3R������(���( -���*���������X������� �[��:p.:;�6`��������<�0`��L -�+0��N�3k&c �����#*�[��: ����V��N�3��<� N -`<��(&%��3��63����B Mp +E����`��B��Ny+0��:;��`��B`���(.�XT ���+ #*+E����`��

Page 123: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� � ��8

3����ga[����(����v(��*�<+ ����3 &c -��3�`�:�+E3������<�0+ 3��B����(.��N��B3���� +0��:;��`�� `���(�� ����+E3��> �( ��NFp :;�*�����V:;�C(. �3���+ #���c3�� (���+0`<�Ma[�<�X���M&x�D:�` � �������<��3����<� � �a[�R� -��(�NL���%���:�+E�d+0��N�3k&c ����"(���+0�����y� �^_� -`> �(.�<����`6+0��N�3k&c �����# �a� ���L �p.����~3s� ��N%+E��:��0`���`���(��������+ &V��3�����:;3 +� ��*�����;� ^_�4����(��<� 3��

�<a- -�:. �3�� ���v�0�<�����*(�:�`�� 3����,`�����3E����p.:;3������ ��N�+0:�`�� +0��N�3k&c ���� 3��B3���� ���<+E�C��`<30��a[�c ����> V��N;����+E�> ���`���#��3g��+g����`��<+0+� ��0� 3�� �. �a[�B+0��:;��`��V`<�*(���� 1va[���d����`��������<�0`��L -F`<����3��7u*3�+ # !>(I�>#]��!$:4=���� +E��N�3s&c M�����+c -(;a- -��`������;� bc��� ����+E3 ����������������3 +0��N�3k&c ����B3��. �3c`������<+ &V��3�� -� +0��:;��`���+c��+ 3����R���C�<�� �30�����+E�*+E3���� n��[#I: & � AB�C�<�4+0��:;��`��+0��N�3k&c ����d`> -� a[�<�0� � �6`<������30�� pC� -(. ���3���(z -��(z���6�����'a[��( ��N�d -�����C�����.�� `�����30�0��p.:�30��� �g:;3X+0:�` � D`�����3E����p.:;3��������+c�i��+0+0��p.�� ������d&V������3����"+0��:;��`��!`<�*(����+X �a� -��L �p.����

Libraries.b,����NL:.��`<30�����

pow&%���2����3Dpi�63�������.~� �d �3������d M3���`> - NL:���`<3������ 3��. �3 &,��&c -��3

3�� :�+0����� ��:;� ���������� -��+��Zb�� �d �/[� 3����d -(�(���3������ ��Nc���<& NL:.��`<30������+ �> -+E� # &,��`> �� �.:;3 3����(��<T.����3������ ��N

powe -��( +0������L ��yNL:���`<3�������+�&,� -(�(D� �3��<�'gC����3��B %+0���.����g+0��:;��`��g`��*(�� T.��

math.C#

-��(�3����B`����0���<+E�C����(������ (���`�L ��� �3�������+g����3�� !+E��������V���> -(��<� T.��math.h

�jb,���B��p rs��`73 `��*(��VT.��math.o

30�.�<�Z`�����3� -����+,�d -`��.���.�B� -����: ���� `<�*(��"NL���V -�C��:;�X�d �3������d �3���`> -.NL:.��`<30������+��SV�3�����:����4��3 ��+6����36+G30����`<30��z����`<��+0+� ��E� #X��3 ��+ �����*(4���� -`73���`���30� ����`��:�(��

math.h���430�.�

pC�������.�������B��Nmath.C

� bc����+v�<�.+E:��0��+230� M3v3����c`<�*(��X���math.C

��+v��� 3����,+0`����C�c��N -�FNL:���`<3�������+(���`�L M����(����

math.h#;+0�<� {*��`<30�����Z8F�����@?;� ^_�Z ��CNL:��.`73������ pi�*(�����+ ���

math.C#F&,� `> -�3����<����NL�����

`> -� 3���� ��3����<�DNL:���`<3�������+ # &V�~3�����:�3 � �a*����� 3�� 3������;/ �pC��:;3 &%�.�73����<� 3�����+0�NL:.��`<30������+ �. �a[� -��0�> -(;��pC����� (���`<L �����(y�^_� �������<�� - #-+0�<a[�<�� �F��p rs��`73 `���(.�jT ���+ �d ��RpC� ������(���( 3��V�������<�� �3�� -� �7uF��`�:;3� �p.��2���������� -� #

-��(=�~3B&,��:.�( pC�D`�:�� pC�<��+0�����"3��30��� 3����D����;/[�<� �pC��:;3 -�v��Nj3������ �!^_�.+G3��> -(�#y��p rs��`73"`<�*(��T.���+23��. �3g�������`> -�~� pC�������� 3������<3����<�g`> -�6pC� ,.=�� ���/p��'B ����30� *d�"S>=�,.= D �jAB���� 30�.�X�. -���X��Ni30�.��+���p��� M�0� �D:�+E3v3������ pC�,����a[��� 30�R30�.�,�����/[�7� ��� ���0(.�7�230� �. �a[�X -�F��~p.�� ��0� NL:���`<3������.+ �a- -��L Mp �� NL���3����%� u;��`�:;3� Mp ��X���������� -� � ^_����:��g`> -+0��#*&,�%+0� N M� �. �a[�V������ �����X��p rs��`<3jT.��

math.o�0��+0:��3������

N������math.C

#;p :;3,&,�!`� -�Z+E3����ip.:.���(� ���p��� M�0�6T.��libmath.a

#�+� �� #�N������H��3>� �����:;���,PB+0`������d �3���`> -��� +0���'&V+v���'&4��p.rG�<`<3 `��*(�� T.���+ #� V���p��� ��E� -��( T.� ����! -� �7u;��`<:�3� �p.��

���������� -�\��+c��p�3� -������(N������ ��:��DpC�7�X��N�+0��:;��`���`���(��"T.���+��

Centralization and namespaces^ 3 ��+ `���> ��!3��. �3 &,��(�� ����3 &c -��3 3�� /[���<�z���> -(��<� T.���+ -��(

���p��� M������+ ��NX�������<�� -,����3��<����+G3 ��� ��:;� &,���0/*����� (����0��`<3����0� #2+0����`��d&,�Ge -��(z��3����<�0+ g �d �� �. �a[��d -����&,���0/F�����D(�������`<30��������+��2$%�� -(��<�XT.��<+X ��.(����p��� �������+ +0����:��( pC�! �3c+0�����R`�����30�� -y�.L -`����� �R`> -��d �/[�V��:;� ���������� ���+ ����(��<�C����(�����3 N������ 3����B��*`� �3���������Nn���> -(��<� T.���+ p��6&%���~3������

#include �� � � �� � ���

p.:;3v��� 3�����+ `> �+0� #�&,� �. >a[� 30�R30����30�.� `<���6� ����<��e &V����� &,� +E3� M�03 ��3'gC&V���<��� 3��B+E�> ���`�� NL���vT.��<+�3��pC�j����`��:�(���(y� b,�.��+���+n�7u� �`<3��� 3����g&c ��"30� M3����> -(��<�0+ ���/[�

iostreamN������ 3����j+E3� -��(. ���( ��~p.�� ��0�

����B���.`<�:�(.�<(+z�3�������� ��*`> �30������+ ����V/*���M&%�d30� 30�.�%`����6�.����<� #�+0� &,�B(����0y 3 �. �a[�V3�� �����Ma*��(��B -�������NL�����d �30�����d�.�7�����c{*������� ����� #[&,�!`> ��Z3����y3����"����;/[�<�X&%���<���"30�.�"���p��� ��0����+ &,�!������( ��0�"3��DpC�NL��:���(n�2SV�[ -��� #*NL���%3����Ra� ��0����:�+c���p��� ������<+c��Nn3����"+G3� -��(. ���(Z��~p.�� ��0� #�30�.� `����6�.����7� /F���M&%+c30�.��+��

�)� �58 �*3 �=� ��9 C � C �� �4�� ��� � �6��>�����6 ���� �����6���F��'���� � �(���*���! ��)�B4���)�=���( �� 3<�=�E ��= �!��$��� �5� C �)A ���( ����)� ����@��!G

Page 124: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� �-? ������� ����� �q�� ��� � � � ���

� ��& �������������� ��& ������� ������

����� ����������� ����� �����������

������������,

������������,

���������� ����,

libmath.a

math.h

math.o callexp3.o

math.C callexp3.C

callexp3

Figure 6:� :N��*-B.�/#;@�!�S � �h� � ��!LB � { * �>��A�*P� S =�,.= �"� ��,.#�B2�'&`����:;�J,cS)* � (0=>!�@=�,.8?�LW

�// math.C

�// a small library of mathematical functions

�#include <MYSTD/math.h>

�namespace mystd {

double pow (double b, int e)

{

���// PRE: e >= 0 || b != 0.0

� �// POST: return value is b^e

���double result = 1.0;

���if (e < 0) {

���// b^e = (1/b)^(-e)

���b = 1.0/b;

���e = -e;

� �}

��for (int i=0; i<e; ++i) result *= b;

��return result;

� �}

� �

� �}

Program 14:(0=>!�@.� �08G,5�V�4W r

Page 125: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� � ��I

� � &c -��3R3��d�����d M�0/Z3��. �3 � � � �� � � ��+ ����3 ����`���+E+� �����~� 3���� �. -��� ��Ng 6� ���F+0��`> -vT.��zC3�����d ����.����� ��N � � � �� � �R3�� -`<3�:. -CT.���+,��+c���6�.������<��3� �30����� (��<T.����(y�

����. -�~� #��~3 ��+j���*�*( �.�� -`<3���`<�X3�� �.:;3 -� NL:���`<3�������+j��Ny "���p��� M�0�D����3�� "�. -����+E� -`<� #���������(��<�3��d �a[����( `�L �+0����+V&V��30�Z:�+0�<� �_(.�<`�L ����<( �. -����+ # +0���D{*�<`<3������ �*����� �*�%my�<3R:�+B:�+0� 3���� �. -����+E� -`<�mystd

�.�7�����

�// math.h

�// a small library of mathematical functions

�namespace mystd {

�double pow (double b, int e);

�// PRE: e >= 0 || b != 0.0

// POST: return value is b^e

���}

Program 15:(0=�!�@.� �08G,5�V�4W-�

�// Prog: callpow3 .C

�// call library function for computing powers

�#include <iostream >

�#include <MYSTD/math.h>

�int main()

{

std::cout << mystd::pow( 2.0, -2) << "\n"; // outputs 0.25

���std::cout << mystd::pow( 1.5 , 2) << "\n"; // outputs 2.25

� �std::cout << mystd::pow( 5.0 , 1) << "\n"; // outputs 5

���std::cout << mystd::pow( 3.0 , 4) << "\n"; // outputs 81

���std::cout << mystd::pow(-2.0, 9) << "\n"; // outputs -512

���

���return 0;

���}

Program 16:(0=>!h@.� �_�h,5*[* (;!$1 �NW r

K �0������ -� ��?6 -��( Kv�������� -� �'ID+E�.�'&)3���� T.�. -y+0��:;��`��"`��*(��! -��(Z���> -(��<�%T.��<+math.C

-��(math.h

#� -��(63����%�d -��� Kv�������� -� �>Pcallpow3.C

`> -��+j��:;�j���p��� ��0�DNL:���`<3������pow

� ^ 3 ���.`<�:�(.�<+3���� �.�� -(��<�XT.��

math.hN��0��� `�����30�� -y(�������`73����0�

MYSTD�

Page 126: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� ��P ������� ����� �q�� ��� � � � ���

3.1.7 Using library functions

x2��:z`> ��4���d -������� 30� M3 &,�d&,�<�������3 3����dT���+E3D3�� �.:;36 NL:���`<3������ ���/[�pow

����30�= ���p��� ��E�[�^_��(�����(�# 3����Z+E3� -��(. ���( ���p��� ��0� `�����3� -����+6 =NL:���`<3������

std::pow3��. �3 ��+6�<a[�<� ������� �������<�� -

3��. -� ��:;��+ �z��3`> -�U`<���6� :;3��be NL��� =>�',5* � uF�C��������3�+

e�|SV`�`����0(.���.��~� #X3���� M����:�������3�+d��N

std::power -��( ��3�+R���<30:��0�=a� ��:�� ��0� ��Ng3k���C�

double� ^_� ����(��<� 3�� :.+E� 3�����+RNL:���`<3�������#y&,�

�. �a[�,30�B����`��:�(��g3���� ���> -(��<�cmath

� b,����+ ���> -(��<�2`�����3� -����+ (���`<L ��� �30������+�NL���2 %a- ������<3k� ��N���3����<��*:����<�0��`> -CNL:���`<3�������+��

�%+0����� NL:���`<3�������+ N������ 30�.�B+G3� -��(. ���(d���p��� ��E�6`> -�������:�+ 3�� ���<3,+0�����03��7� #*pC�<3E3��<� #F���,�����0�� � `�������3 `<�*(�� #,&V��3�����:;3��. �aF����� 3�� &X����3�� +E�������� ���<& �������p��w��:;��+0���a[�<+�� ;���d�7u; -�6�.�� #`����6�.:;3������ � � :u,.=>�9=>!!.�V� `> ���+E�C�<��(Z:;�Z��:;�,�������d -��~3s� 3��<+E3c���ZKv�������� -�Ho*�_x2��: ��������3 �. �a[����> ��� � ��( 3�����+ � :�`�� �> �������<� #Mp :;3 &%����� &,�, ����g30�E�F�����%3��VT.��( +0�����g�������C�7�v(���aF��+E��� ��N. %�. �3�:;�� -�*:�� pC�<�

n � 2#C�~3R��+B+0: �6`�������3R3��d+0�> M��`��=��� 3���� �� -�����

{2, . . . ,� � n � } �!^_�.(����<( #C��N n

`> -� pC�&%�0��303����= -+ ������*(�:�`<3

n = dd � # 3������ 3����D+0�d -���<�R��N d -��(

d � �D:�+E3RpC� pi��:.��(���(=p�� � nz

+0����`��R3���� (.�~aF��+0���0+X M���!����3������<� #F&,�"�<a[�<� ���<3V pC��:���(Z��N � � n � �bc��� ���������� ��

prime.C`���:��( 3����<����NL����� pC�"&%����3E3���� �������!� �6`����<��3��� -+B��� K �0������ -� �'o #

:�+0�����"30�.�XNL:��.`73������std::sqrt

N������t3����%���p��� M�0�cmath

#�&V����+0�X� ��� -���<3��<�j -��(6���73�:;���63k�*�C��+ ����

double�

�// Program: prime2.C

�// Test if a given natural number is prime.

�#include <iostream >

�#include <cmath >

�int main ()

{

// Input

���unsigned int n;

� �std::cout << "Test if n>1 is prime for n =? ";

���std::cin >> n;

���

���// Computation: test possible divisors d up to sqrt(n)

���unsigned int bound = 1 + ( unsigned int)(std::sqrt(n));

���unsigned int d;

� �for (d = 2; d <= bound && n % d != 0; ++d);

��

��// Output

� �if (d <= bound)

� �// d is a divisor of n in {2,...,[sqrt(n)]}

� �std::cout << n << " = " << d << " * " << n / d << ".\n";

� �else

� �// no proper divisor found

� �std::cout << n << " is prime.\n";

Page 127: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� � ��o

� �

� �return 0;

� }

Program 17:(0=>!�@.� �c(0= �/82� �;W r

bc���%���������� -�|��+j`����E����`<3 � ��Nd <= bound

+E30���������(�+g -N�30�<� 3����%��*��� #�&,�%�. �a[�V���N�323����%������pC��`� -:�+0�c30�.� !.�V�;�>= `�����(���3������

n % d != 0�. -+jN ������(y�vb,����+ ���> -��+v&,�X�. �a[�XNL��:���(� R(���aF��+E���>�

^_Nd > bound

�����(�+c -N�3��<�X3����"��*��� #*&,� � �a[� 30������(� -�C�C��+0+E��p.��B(���aF��+E����+X+E�d -���<� ���%� ��:. -C3��bound

e &V����+0�Ba- -�:��"��+1 +� � n � g�#�+0�D&,�"`<�<�03� -���.~�d� �a[�"�.��3c����+E+0��(Z ����(���aF��+E���>������ (.��(.�0y 3�&,� ���.�~3��L -�� � �

bound&V�~3�� � � n � #B �+&,� +� -��(�&,� `> -� (���� SV+�&,� (.���0y 3

���> ���� /*�.�'&\���M&std::sqrt

��+ ���6�.���������3���(�# &,��. �a[�3�� pC�d�����<� ����<(zNL��� +0�d -�j�<�0������+ #�<a[��� ��Nn3���� �7u� �`<3%+ �*:. ����R���*��3c��N

n��+X

doublea- -�:����� ;���%�7u; -�6�.�� #

std::sqrt(121)�d ��

�F�����(10.99998

� �g:;3j3�������#(unsigned int)(std::sqrt(121))

&V�����. �a[�Va� ��:��10#* -��(dp��

�d �/*����� 30�.��+c��:;�cpC��:���( #F&,� ����+0+ 3���� (���aF��+E���11��N

121�

3.1.8 Details

Function declarations and definitions.SUNL:���`<3�������d �� � �a[�R+0�<a[�7�� -C(���`�L M�� �3�������+ #��<a[���&V��30�

3����D+� -���D(.�<`�L ��� M3���a[� ������������+9e 3����DL �303��7�"��+"����3! -���'&,��( NL���!a- ����L �p.��<+ #y+0���d{*��`73������ �*� ?;�98.g7�b,�.� �.:;�0�C��+E� ��N. %NL:��.`73������ (���`�L ��� �3������ ��+�3��V�.:;3v+0:;p.+0� �*:�����32`��*(�� ����3��V3���� NL:���`<3������0y + +0`����C��# -��(�3����<�0�"�d ���pC� +0�<a[�<�� - �.L -`<��+ &V���<��� 3�����+,��+X����`<��+0+� ��E�[�AR� 3���� ��3����<�R�. -��(�# �<a[�<�E� NL:���`<3������ `� -� �. �a[� ������Z����� (��<T.����3�������# -��( 30�.��+V��+V3���� �����

-�C�~3�+X(���`<L ��� �30������+ ����NL�<�X3��;�

Function signatures.^_� NL:���`<3������ (.�<`�L ��� M3�������+ #C3���� NL���0�d - � ��� -���<30�<� � �����+ � �� � � ��#�� ��� #

� �� � ���|`> ��ZpC�"�����~303���(y�bc����+%�d �/[��+%+E����+0� +0����`��!3�����+E� � �����+V ��0� ������������<(.�<( ��� 3���� NL:���`<3������ (.�7T ����30�����y�Xb,���

���6�C���E3� -��3c����NL�����d M3�������#;�. -������(����d -���� -��( �� -����� ��Nv3���� NL:��.`73�������#i ��0� -����� -(;��+E�i��`���T.��(p*� 3����,� ��� -���<30�<�v3k�*�C��+j -��( 3����,���<3�:;���D3k�*�C��� SV�F3�����+0�,3s���C��+ 3������<3����<�jNL������3���� ���[@$#�,5��:N=>���N 30�.�"NL:��.`73������y�^_�

math.h#;&,�"`<��:.�( 3����<���<NL�����!� ��:���a� ������30���&%���~3��B3����"(���`�� ��� �3������

double pow (double , int);

b,�.�=���.~��������p.��<� ��+3��. �3�&,� ������(U3���� NL�����d -B� ��� ����<3��<� �. -����+d3��4+E�C�<`���N�� �������� -��(�C��+E30`�����(.�~3�������+ #g&%��3�����:;3 ��������� 3�� �������3����zNL����� :�L M3�������+ ����a[���a*����� �G3����ZT���+E3� �����:�������3 � -��( �G3����6+0��`<���.( �����:�������3��;�bc���<�0��NL����� # &,��:�+0:. -�~� &X����3��D3�����NL�����d - � ��� -���<30�<�!�. -���<+�<a[��� ����NL:���`<3������Z(���`<L ��� �30������+��

Mathematical functions.�Z -��� ��N,3������d �3������d M3���`> -�NL:.��`<30������+ 3��. �3 ����d �a- -��L Mp �� ��� +0`����

����3���T.`"�C��`�/[�<3B`> -�`�:�L �3�����+c ��0� -�+0� �a� -��L �p.�� N������ 3���� �d M3�����~p.�� ��0�cmath

�cb,�.�!NL�����'&V�����3� �p.��!���+E3�+c3���� ����+E3V�C���.:�L ��%������+��BSV� ��Nv3������l ���� �a- -��L �p.�� NL���R3���� 3��;����� !.�[ �3����.�D�C������3�*:�� pC�<�,3k�*�C�<+

float#double

-��(long double

Page 128: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� ��# ������� ����� �q�� ��� � � � ���

�. -��� NL:���`<3������

std::abs |x|

std::sin+0���

(x)

std::cos`���+

(x)

std::tan3� ��

(x)

std::asin+E��� −1(x)

std::acos`<��+

−1(x)

std::atan3� -�

−1(x)

std::exp ex

std::log��

x

std::log10����

10 x

std::sqrt � x

3.1.9 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6pC�" �p.�� 30� �7u*�.L -���3���� �.:;�0�C��+0� ��N NL:���`<3�������+,��� 5cW Wfz�$g�:��.(��<�0+E3� -��(d3����B+E�F��3� Mu -��(d+0���d ���3���`<+ ��N 5cW"WxNL:.��`<30�����d(.�7T ����30������+ -��(d(���`�L ��� �3�������+>z8.g�:��.(��<�0+E3� -��(�3���� NL:��.`73������

powN��0��� Kv�������� -� � �wz

?5g6/F���'&�&%������3�d �/[��+d+0�<�.+E�=3�� `����6�.���� NL:���`<3������ (.�7T ����30������+�+0�<� ��� �30���� #B -��( 30� �.:;3NL:.��`<30������+X����3��D���p��� �������+��

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)g�T.��( ������� -��(��i��+E3�`�����(���3�������+ NL���X����a[���ZNL:���`<3������.+�zek} �$g�T.��( +E�*��3� -`73���`> -X -��( +0���d ���3���`� -,�<�0������+ ���4NL:���`<3������ (��<T.����3�������+ #g -��( ���4���������� -��+

3��. �3c`�����3� -��� NL:��.`73������Z(��<T.����3�������+>zek} 8.gd�7a� -�: M3��RNL:.��`<30�����Z`> -�C�7uF������+E+0������+>zek}R?5g�&X����3�� NL:���`<3������.+ -��( ���������� -��+V3��. �3R:�+0� �[��:;� �M&%�=NL:���`<3�������+ -��( +G3� -��(. ���(=���p��� ��0�

NL:���`<3�������+>zek}"I$g�p.:����( ���p��� ��0�6�����[��:;�%�.L �3�NL���0� �

3.1.10 Exercises

Exercise 47�m�/#�BX(0=>� Hi,.#�B (I!.���<��!$#�B.�����"!$#0��KL!$=F�V�;�3K�!.*/* !$1��/#;@ K�:N# � ���J!$#0�LW ek} �)ghe }"8.g

gint f (double i, double j, double k)

{

if (i > j)

if (i > k)

return i;

Page 129: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� � ��q

else

return k;

else

if (j > k)

return j;

else

return k;

}

p4gdouble g (int i, int j)

{

double r = 0.0;

for (int k = i; k <= j; ++k)

r += 1.0 / k;

return r;

}

Exercise 48\ �4,5� ,.=>�F�V�;�k(0=>!�S)* �>8?�91����V� �V�;��K�!.*/* !$1��/#;@ K�:N# � ���J!$#0� � ��� &G�V�;��8 ,.#�B { #�B

, (c(0=>!>(0= � ,5�<�k(0=>�>Hf,.#�BX(I!.�>�<��!$#�B.�/���J!$#0�LW ek}D�)ghek} �$g g

bool is_even (int i)

{

if (i % 2 == 0) return true;

}

p4gdouble inverse (double x)

{

double result;

if (x != 0.0)

result = 1.0 / x;

return result;

}

Exercise 49\ �4,5� �/� �V�;�C!$:;� (0:4�?! K �V�;� K�!.*[* !$1��/#;@2(0=>!�@$=�,.8YA�B �J(;�>#�B.�/#;@O!$# �V�;�M�/#�(0:4�

#I:48GS>�>=a� ek} 8.g

#include <iostream >

int f (int a)

{

return a * a;

}

int g (int a)

{

Page 130: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>8�] ������� ����� �q�� ��� � � � ���

return a * f(a) * f(f(a));

}

void h (int a)

{

std::cout << g(a) << "\n";

}

int main()

{

int a;

std::cin >> a;

h(a);

return 0;

}

Exercise 50�m�/#�B?�V��=>��� (0=>!�S)* �>8?�9�/#U�V�;��K�!.*[* !$1��/#;@9(0=>!�@=�,.8�W ek} �$g

#include <iostream >

double f (double x)

{

return g(2.0 * x);

}

bool g (double x)

{

return x % 2.0 == 0;

}

void h ()

{

std::cout << result;

}

int main()

{

double result = f(3.0);

h();

return 0;

}

Exercise 51�I�/89(+*P� K�D]�V�;� (0=>!�@=�,.8 Kh=>!$8 ^ &`�>=>������� �

�S>D :4���/#;@ �V�;�sK�:N# � ���J!$#

powK�=�!$8

a =>!�@$=�,.8 � �;W ek}R?5g

Page 131: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� ����� � � � ��� �>8;�

Exercise 52\ = ���<�Y, K�:N# � ���J!$#

bool is_prime ( unsigned int n);

// POST: return value is true if and only if n is prime,.#�BF:4��� �V�����_K�:4# �>���J!$# �[# , (0=�!�@$=�,.8 �<!6��!$:N#0� �V�;� #I:N8�S��>= ! K 3k&%��� ���������<+ �[# �V�;� =�,.#;@c�{2, . . . , 1000000}

�<��1b!F:q( �<!6!$# � 8Y��*[*P�"!$# W � ��1��[#6(0= �/8�� ���i, (4,.�/= ! Kb#I:N8�S>��=)�(i, i+2)S>!.�V� ! K913���"� �],.=>�b(0= �/8���W ek}R?5g

Exercise 53\ = ���<�Y, K�:N# � ���J!$#YK�!$=6�h!$8X(0:4���/#;@6�V�;�F�V���/=hB?=>!!.�s! KF,6#I:48GS>�>=

x � � W ek} ?5g

Exercise 54�m�;� Kh:4# � ���"!$#

pow�[# a =>!�@=�,.8 � � # ���hB5�

|e|86:4*T���P(+*P�"�h,5���J!$#0� �<!G�h!$8X(0:4�<�

beW

r �4,.#;@c�R�V�;� Kh:4# � ���"!$# S>!�B.D ��:u� � �V�4,5�i* � �>��86:;*P���T(+*d�J�',5���J!$#0� ,.=>� (I�>=VKL!$= 82�'BcW ��!$:C8�,.D:;�L� �V�;�3K�!.*[* !$1��/#;@ KL, �>�JW � K

e � 0,.#�B

e�4,5�FS �/#�,.= D =>�"(0=>� ���>#0�J,5���"!$#

e =

∞∑

i=0

bi2i,

�V�;�>#

be =

∞∏

i=0

�b2i � bi

.

ek}R?5g

Exercise 55� :4�/* B , *d�"S>=�,.= D !$# D`!$:4=Y(+* ,5� KL!$= 8 K�=�!$8 �V�;� { * � �

math.C,.#�B

math.h�/#

a =>!�@$=�,.8 � �O,.#�B a =>!�@=�,.8 ���`W � ���6�V���/�Y*d�"S>=�,.= D �<!G@c�># �>=h,5�<� ,.# �'&`�h�>:;�J,cS)* �F(0=>!�@=�,.8K�=�!$8 a =>!�@=�,.8 �

�W ek}R?5ghek}!I$g

Exercise 56

, � BcB �V�;�6KL!.*/* !$1��/#;@�K�:4# �>���J!$# B �h� *-,.=�,5���J!$#%�<!math.h

A ,.#�BU(0=>!$p� B � ,Q8�,5�<� ���[#;@B � { #I�/���J!$# �/#

math.CWY��� ����D`!$:4= # ��1�K�:4# �>���J!$#�� ek}R?5ghek}"I$g7�

int round ( double x);

// POST: return value is the integer nearest to x

p4g ^_+ 3������C��+E3�`<���.(���30����� ��NX3����dNL:��.`73������ `����6�.��<3��'�H{��C��`<�L -�� � ����3 NL��� �[��:;�DNL:���`<3������ ��N����`��<+0+� ��0�[� ek}D�)g

Page 132: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>8 � ������� ����� �q�� ��� � � � ���

3.2 Recursion������� ���h� ���J!$# �[#0��=>!�B.: �h� � =>�h�>:4=)�h�/p��YK�:4# �>���J!$#0��AiKh:4# � ���"!$#0� �V�4,5��B.�[=>���>�V*PD !$=�[#�B.�/=>�h� �V*PD �',5*/* �V�;�>86��� *dp�� �LW � !$:213�/*/* ���h� �V�4,5��=>���>:N=)���/pw� K�:N# � ���J!$#0�F,.=>�9p��>= D#�,5��:N=�,5*��[#�8�,.#ID �h����:u,5���"!$#0��Ab,.#�B2�V�4,5�b�V�;�>D�* �h,cB��<! ��!$8X(4, � �f,.#�B =��h,cBc,cS)* ��h!�B �U� * !.���M�<!�8G,5�V�;�>8�,5���"�h,5*_K�:4# �>���J!$# B � { #I�/���J!$#0�LW \ �M1���*[*i,5*P��! � &)(+* ,.�[#�;!$1 =>�h�>:4=)�h�/p��XK�:4# �>���J!$# �',5*/*P�],.=>��(0=>!���>�>���hB.A?,.#�B��;!$1 =>���>:N=)���J!$# �h,.# �J�[#(0= �[# �>�T(+* � S>� =��J(+* , �h�hB 1����V�G���<�>=h,5���J!$#�W

3.2.1 A warm-up�Z -��� �d M3������d �3���`� -�NL:.��`<30������+X M���R� M3�:;�� -��� (��<T.�.�<( =>����:4=)���[p�� *dD #����> -������� 3��. �3,3����RNL:���`��3������430� pi� (.�7T ����(� ����C�� ���+���� ��30+6�M&%� (��<T.����3������n� ����d� u� -�6�.�� #j3���� �*:��Dpi�<�

n!`> -�

����`<:��0+0��a[����dpC� (��<T.����( -+XNL�����'&V+��

n! :=

{1,

��Nn � 1

n � (n − 1)!,��N

n > 1�

^_��5XW W &,� `> -�w -�+0�=�. �a[� ���<`�:;��+0��a[�ZNL:���`<3������.+ �Z NL:.��`<30�����4�d �� `> -�,��3�+E���N �4b,����+D��+����3�������� �7uF��3���` #.+0����`�� -N�3��<�V -� #. NL:���`<3�������`> -�n��+grs:�+E3B �� �7uF������+E+0����� 3��. �3V`� -� ���Z��������`����.�� ����C�> M�� -���*&V���<�0�����43���� NL:.��`<30�����0y@+ +E`����C� #, -��(43��. �3 +0`����C������`��:�(���+D30�.��NL:.��`<30�����zpC��(��[�$%�<�0�%��+g ����`<:��0+0��a[�%NL:���`<3������6NL��� `����6�.:;3������

n!zF���6N �`<3 #�30�.��+j(��<T.����3������D�7u; -`<3��� �d �3�`�����+ 3����

�d �3������d M3���`> -.(��<T.����3������N������ �pC�'a[���

unsigned int fac (unsigned int n)

{

// POST: return value is n!

if (n <= 1) return 1;

return n * fac(n-1); // n > 1

}$%�<����#�30�.�"�7uF�����<+0+0�����

fac(n-1)��+% =>�h�>:4=)���[p��6�',5*/* ��N

f�

Infinite recursion.����3�� ����`�:;��+0�~a[� NL:���`<3�������+ # &,�D�. �a[� 3���� +� -��� ��+0+E:.�D -+V&%��3�� ��*���.+se {*��`��

3������ �*�@?;� �$g�� ��3c��+X�� -+E�d3�� &X����3��R(��'&V�ZNL:���`<3������ `> -��+,&%����+0�"�7a� -�: M3�������(�����+X����3c3��<������� M3����$%�<�0�"��+,3���� +0�����03���+E3X&c �� ��N `<���> M3������ ��Z���;T.�.�~3��V����`�:;��+E�������j(��<T.��� 30�.� NL:���`<3������

void f()

{

f();

}&V�~3�� �.� � ��� ����<3��<��+ -��( �7a� -�: M3��63������7uF�����<+0+0�����

f()� b,�.�6�0�> -+0��� NL���D�.��� � 3��<�������. �30�����

��+d`���� �� �=3���� �<a- -�:. �3���������Nf()

`�����+0��+G3�+d��N! -� �<a- -�:. �3������w��Nf()

&V����`�� `<���.+E��+E3�+d��N" -��<a- -�:. �3������ ��N

f()&%����`��n�7���0�[��:Z���<3c3����R� ��`<3�:;�����

Page 133: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� �>8�8

mn�~/[�"NL���X��*���.+ #F30�.� NL:���`<3������ (.�7T ����30�����d� �+c3�� �d �/[�R+0:;���R3��. �3,�.�0��������+0+c3��M&c M��(�+,30�<��������. �3������ ��+c�d -(�� �����<a[�<�E�ZNL:���`<3������Z`� -�_�� ;���%3���� NL:��.`73������

fac �pi�Ma[� #;3�����+c��+,3����"`� -+0� � �� -`��

3������fac

��+2`> -����( ����`<:��0+0��a[���� #[3����Xa- -�:��c��Ni3����X`� -��� M�� -���<3��7�2pi��`�������+2+0�d -���<� #[ -��( &%�.�<�3����6a- -�:��6���> -`�����+

1# ��� �����0� ����`�:;��+E��a[�d`> -��+ ������C�<��NL���0����(��D&,�d+� �� 3��. �3 30�.�6�0��`�:;��+0�����

�GpC��3030����+ ��:�3 �;�

3.2.2 The call stack

my�<3 y@+�30�E��30� :���(��<��+E3� ��.( &V�. �3d�7u; -`<3���w�. ����C�<�.+(�:;������� 3���� �<a- -�:. �30����� ��Nfac(3)

#V+� ��[�b,�.� NL�����d �!� ��� -���<30�<�

n��+ ������3��L -�� � ��( &%��3�� 3

# -��( +0����`�� 3�����+ ��+ ������ �3��<� 3��. -�1#!3����

+E3� M3���������3return n * fac(n-1);

��+B�7uF��`�:;3���(=�.� uF3>�!bc����+VT���+E3R�7a� -�: M3���+B3���� �7uF������+E+0�����n * fac(n-1)

��.( ���d� M�03���`�:�L M� 3���� �0������3,���C�7�� -��(fac(n-1)

�g{*����`��n-1

�. -+ca- -�:��2#F3����

NL�����d -i� ��� -���<3��<�n��+c30�.�7����NL�����"������3��L -�� � ��(6&%��3�� 2

��g:;3c&c ���3 � &V�. �3,��+ �G30�.� �DNL���0�d - � ��� -���73��<� � S%:�30���d �3���`X+E3����� -���R(�:;�� �3���������6� �����+j30� M3

�> -`�� NL:.��`<30����� `� -�i�. -+ ��30+ �E�M&%� � N����<+0������+E3� -��`��B��Nn30�.�BNL���0�d - � ��� -���73��<� #� -��( 3����B���NL�<3��������N 3�����+X����+E3� -��`��"��+X3���� ����+E�C�<`<3���a[� NL:���`<3�������`> -�_�,^_� �<a- -�:. �30�����

f(n-1)#.&,�"3����<���<NL����� ���<3B

���<&|����+E3� -��`�� ��N 3����6NL�����d -v� ��� -���73��<�n# ��� 3���� ��N 3���� �����<a*����:�+!����+E3� -��`�� N�������3����6`> -�

f(3)e 3��. �3 �. -+ ����3 �[�<3 30�<�������. �3��<(4g ���g:;3 &V����`�������+E3� -��`��V��N

n(.� &,�%:.+E�B����3����V�<a- -�:. �3������

��Nf(n-1)

�bc����+ �*:���+E3������ ��+ ���<& #� -�3�����:����!&,� -~���> -(;�"����`���:���3��<�0��( c+0������� ��y� �������������������y+0�<a[�<�� -

����+E3� ��.`<��+%��Nv a� M���L �p.�� �d ���pC�!�������<�� �3���( N������ +0���.����"(���`�� ��� �3������ #;��N 3�����+X(.�<`�L ��� M3��������+�7uF��`�:;3���( +0�7a[�<�� -n3�������+,���3����"pC��(��d��N D������ ek{*�<`<3������ �*� ?;�98.g7��g:;3%�����7uF��`�:;3������ 30�.�"��*��� #������ !$# � ����+E3� ��.`<� �7u;��+E3�+V M3R -��������a[���Z3������ #�+0����3V��+B -�&c ��F+X`���> M�%&V����`�� ����+E3� -��`��!��+%:.+E��(y�^_� �0��`�:;��+0��a[� NL:��.`73������z`� -��+ #v3��������+E3� -��`��<+D��N% -� `> ���+ 3��. �3 �. �a[������3 �[�<3 30�<�������. �3��<( M���������+0�<��3B M3X3���� �L,.82� 3������ #F -��(�&,� ������( -���7uF30�� ��:���B3��D����+0��~a[�"3�����+c -� p.����:���3k�[�bc����+ ��:�����+ �*:���3���. �3�:;�� - �d�> �` � NL:���`<3������4`> -�,:�+0��+ ��3�+D�M&%�4����+E3� -��`��<+ ��N%30�.�NL�����d -

� ��� -���73��<��+ #F -��(�3����"���.+G3� -��`���+c��N NL�������<�c`> ���+c ���� ����(�(.�<�n�bc���D3���`����.��`> -v���> -�� � �3������ ��N23�����+"��+ a[�<�E�=+0���6� ���� 1 a[�7�0�*3������ NL:��.`73������=��+"`> �����(�#C3����

`> -� � ��� -���<3��<�0+R ���� �7a� -�: M3���(�#n -��(=3����D�0��+0:��3������da� ��:���+! M���D�.:;3! �3!`<�<�03� -��� -(�(;����+0+E��+!���3���� �h,5*[*s�>�J, � Z &V����`�� ��++E���6�.��4 ���<������� ����3���� `����6�.:;3��<� y +����������0�[�)my��/[� +E3� -`�/���N� ��C�<�0+X�����[��:;�X(���+E/ #;3���� `> -�y+E3� -`�/��. -+,3���� �������i�<�03k�d3��. �3,3����"��p.rs��`<3�+,3��. �3c`> -���RL -+G3% M����E���=3���� �;� �X�C��� 30�<�������. �3������ ��N NL:���`<3������=`> -� #C3����D3���� ��p.rG�<`<3�+" ���� 3� �/[��� ��h 3���� +E3� -`�/ -�[ -���n� ���������<a[�<�% NL:���`<3������`> -�i -`�`���+E+0��+c���X`��. -������+,��3�+ NL���0�d - � ��� ����<3��<��+ #F��3 (��*�<+c+E�Dp�� -`�`<��+0+0����� ���%`��. -���������D30�.� `����0�0��+E�C����(������ ��p.rs��`<3�+c����3�������N�3����"+G3� -`�/i�bc����+n�. -+ -��3���� �.�0���C�<�03�����+n&,� &c -��3 �y�<a[�<�0�"NL:��.`73������ `> ���&,���0/F+y&V�~3��!��30+n�'&V�!����+E3� -��`���+n��N

3����%NL���0�d -;� M�� -���<3��7��+>z[&V��������3g`> -��+j -����3����<�gNL:.��`<30�����?e_���j3����%NL:���`<3���������30+0���N �0��`�:;��+0��a[�<�� g�#3�����+0�,����+E3� -��`���+ pC��`<����� 3����6�C���� M������ ����(�(�����#�:.��3����3����c����+G3���( `� -�F�. -+v3��<�0�����. �3���(y�nS,3v30� M3�C������3 #[3����V����+E3� -��`��<+g���> ����C�� �� ����3������Ni3����V+E3� �`�/� -��( ����'&�30�.�%�����������. -�NL:���`<3������63�� &,���E/&V�~3�� 3������H -�[ ����y�b �p.�� ?4+0���'&V+����'& 30�.��+&,���0/*+�NL���

f(3)#R -+0+0:�������� 3��. �33���� ��������3����i�<�� -��(U��N!3����

�D:.~3����.���`> M3������B���C�<�� �3���� ��+v -�&c ��F+ �<a- -�:. �3���( T���+G3>�vK :�3E3������B -� ��p.rs��`<3v��� 3���� +G3� -`�/ �G�.:�+0����+ ���3 #� ��.( 3� �/F���.� 3����R3���� ��p.rs��`<3X��N �G�C���.+ � ��3>�

Page 134: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>8�? ������� ����� �q�� ��� � � � ���

`> -�C+E3� -`�/�e pC��303���� ←→ 30���;g �<a- -�:. �3������+0� ��:�����`�� �`<3������

����� fac(3)`> -�

fac(3)#;�.:�+0�

3

����� n: 3 n * fac(n-1)�<a- -�:. �30�

fac(3)

����� n: 3 n * fac(2)`> -�

fac(2)#;�.:.+E�

2

����� n: 3 n: 2 n * (n * fac(n-1))�<a- -�:. �3��

fac(2)

����� n: 3 n: 2 n * (n * fac(1))`> -�

fac(1)#;�.:�+0�

1

����� n: 3 n: 2 n: 1 n * (n * 1) fac(1)�<a� ��:. �3���(�#F�C���

����� n: 3 n: 2 n * (2 * 1)�<a- -�:. �3��

fac(2)

����� n: 3 n: 2 n * 2 fac(2)�<a- -�:. �30��(�#F�C���

����� n: 3 3 * 2�<a� ��:. �3��

fac(3)

����� n: 3 6 fac(3)�<a- -�:. �3���(�#;�C���

�����

Table 4:�m�;���',5*/*s�>�J, �>Z�A�,.#�BQ�;!$1 �/�G��p�!.*Ppw� �CB.:N= �/#;@ ,.# �>pw,5*d:u,5���"!$# ! K

fac(3)� �V�;�

=>� � (I��� ���[p��Fpw,5*d: ��! Kn

�<!6:4���X�/� ,5*d1�,.Dw�9�V�;��!$# �6!$#U�<!>(

�g��`> -:�+0� ��N 30�.� `> -�"+E3� -`�/ #"���;T.����3�� ����`<:��0+0������+Z(��4����3 �������`�����+0:���� 3������ p.:;3 -�+0����������0�[� �%�����/[� ���;T.����3�� ��*���.+ #i3����<� :�+0:. -���Z��> -( 3��� 6���������� �� MpC���03������ -+R+0����� -+R3�������������0� ����+0�<�Ea[��( NL���%3���� `> -�y+E3� -`�/ ��+XNL:��_�

3.2.3 Basic practicemy�<3,:�+ `�����+0��(��<� 3k&,� �������%+E���6�.��c�0��`�:;��+0��a[�RNL:���`<3�������+g30� M3, ����B+0�����7&V�. �3 �����0�%����3��<����+G3������3��. -�

fac�"b,�.�7� +0���M& 3��. �3B�0��`�:;��+0��a[� NL:���`<3�������+ ���� � ��E3���`�:�L ��0��Z ������. �p.��"3��`����0�0��`<3�����+0+

�����*��NL+d��N 3����������C��+E30`�����(.�~3�������+ #c -��( 3�����+��d M/[��+63������ �3030�� -`<3���a[�-� AB� 3���� ��3����<��. -��( #&,� -�+0� +0���3��. �3 ��3D��+ �> -+G� 30� &X����3����������*`<����3 �_��*��/*�����Z����`�:;��+E��a[� NL:���`<3������.+ 3��. �3 ��0�da[�7�0������ � `�������3X3��D�<a- -�:. �3��-�

Greatest common divisor.5 ���.+E��(��<�"30�.� ������p.�������NjT.��(������3���� �����> �3��<+E3!`<��������� (���a*��+0���

��`�((a, b)

��N.3k&,�"�. �3�:;�� �;�*:��Dpi�<��+a, b

�vb,����+ ��+ (.�7T ����(6 -+v3����XL M������+E32�. �3�:;�� -*�*:��Dpi�<� 3��. �3(���aF��(.�<+"pC��3��

a -��(

b&V��30�.��:;3R�����d �����(.�7�>��^_� � ��03���`�:�L �� #n��`�(

(n, 0) =��`<(

(0, n) = nNL���

n > 0#;p :;3c��`�(

(0, 0)��+c:���(��<T.����(y�

bc���X^ :u� *P� B �h,.# ,5*d@c!$= �/�V��8 T.��(.+c��`�((a, b)

#*p -+0��(Z��� 3����"NL�����M&%�����

Lemma 1� K

b > 0A��V�;��#

��`�((a, b) =

��`�((b, a

���*(b).

Proof.mn�<3

kpi�! (���aF��+E���X��N

b� ;�0���

a = (a(���a

b)b + a����(

b

Page 135: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� �>8[I

��3cNL�����'&V+ 3��. �3

a

k= (a

(���ab)

b

k+

a���*(

b

k.

{*����`��a(���a

b -��(

b/k ���� ����30�����<��+ #F&,�"���<3

a���*(

b

k� � ⇔ a

k� �

.

^_� &,����(�+ #C��Nk��+R �(���a*��+0���B��N

b#i3������

k(���a*��(���+

a��Ng ��.( ������ ��N

k(���aF��(���+

a���*(

b�!b,����+

���> -��+ #.3���� (.�~aF��+0���0+V��Na

,.#�Bb ���� � u� -`<30��Z3���� (���aF��+0����+B��N

b,.#�B

a����(

b�Rbc����+V�����'a[��+

3��. �3c��`�((a, b)

-��( ��`�((b, a

���*(b) ��0�!� ��: �_�

$%�<���2��+y c5cW"WzNL:���`<3������"NL���n`����6�.:�30�����g3���� �����> �3��<+E3n`����������B(���aF��+E���y��N�3k&,�unsigned inta- -�:���+ #. -`�`<����(������D3��D3����!1 :�`����(��> ��Z -������0��3���� �

unsigned int gcd (unsigned int a, unsigned int b)

{

// PRE: (a,b) != (0 ,0)

// POST: return value is the greatest common divisor of a and b

if (b == 0) return a;

return gcd(b, a % b); // b != 0

} X��3��c3��. �3g30�.��+gNL:���`<3�������`> ���7a[��� �E`<���6� :;3�� �!��`�(

(0, 0)#� -�3�����:���� 3�����+2a� -�:.�%��+g�d �30�.�<�d �3����

`> -����:���(.�7T ����(y�v� � `���:��( ����� ��.`<� ��:;�X�d �3������d �30��`> -�(��<T.����3�������3��D����`��:�(��V3�����+ `> -+E�! -��((;�����3����R�����<`�����(.�~3�������#�p.:;3,��3 &%��� (��<�i����( ���d3���� ���� ���`> �3������ &V���<3����<� 30�.��+ ��+ (���+0���� Mp ��V�������3>�bc��� 12:�`����(��> -� -���������30�.� ��+ a[�<�0� N -+E3>� �=� `� -�4�> -+E���� `> �� ��3 NL��� -���

unsigned inta- -�:���+c���Z��:;�X�.L �30NL����� #�&%��3�����:;3,�.��30��`������ -���(���L ��d����30�.� �<a- -�:. �3������n�

Correctness and termination. ����"����`�:;��+E��a[�6NL:���`<3�������+ #n��3"��+"��N�30��� a[�<�0�=�> -+E� 3�� �����'a[� 3��. �3

3������C��+E3�`<���.(���30����� ��+ `����0���<`<3 # p*� :�+0����� 3����d:.��(��<��~�F����� �d �3������d M3���`> - (��<T.����3������ (����0��`<3���e_��~/[�

n!NL���

facg�#v��� p�� :�+0����� +0����� N -`<3�+ 3��. �3 NL�����M&|N������ 30�.���d M3������d �3���`� - (��<T.����3������

e_��~/[�"my�����d 6� NL���gcd

g7�bc���"`����0����`73�����+0+V�����*��N � :�+E3X����a[���a[� 3��<������� M3������������*��N #.+0�6��73 y@+c+E3� ��E3%&V�~3�� 3�����+ � -���

`> -� 3��gcd

3��<�������. �30��+ #�+0����`��V3����%a- -�:��b��NC3����B+0��`<���.(d� ��� -���73��<� ��+gpC��:���(.�<( N������|pC����'&

p*�0 -��(Z���<3�+X+0�d -���<� ��� �<a[�<�0� ����`�:;��+0�~a[�!`> -� e &,�"�. �a[�

a���*(

b < bg7�

} ��a[�<�Z3�����+ #�3����!`����0�0��`<3�����+0+B��N 30�.� �C��+E3�`<���.(���30������NL�����M&%+XN������ mn�<���d ��"p*������(.:�`<30��������

b�� ;���

b = 0#�3�����+%��+%`���� ��>�� ;���

b > 0#.&,� ����(�:.`73���a[���� �+0+0:����"3��. �3X3����!�C��+E30`�����(.�~3������

��+B`����E����`<3 NL���" -� `> -��+X3��gcd

&V���<��� 30�.� +0�<`�����( � ��� ����<3��<�B�. -+Ba- -�:��b � < b

�!{*����`��b � =

a����(

b+� �30��+ET.��+

b � < b# &,� �d ��Z �+0+0:����!3��. �3V30�.� `� -�

gcd(b, a % b)`����0�0��`<3�������<3�:;����+

��`�((b, a

���*(b)� �g:;3Xp��30�.� ������d #*��`�(

(b, a���*(

b) =��`<(

(a, b)#F+0�D3����!+E3� M3���������3

return gcd(b, a % b);`����0�0��`<3���d���73�:;����+X��`�(

(a, b)�

Page 136: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>8�P ������� ����� �q�� ��� � � � ���

Fibonacci numbers.b,���V+0� ��:.�<�.`<�

0, 1, 1, 2, 3, 5, 8, 13, 21, . . .��N �m�"S�!$#�, ���>� #I:N8�S>��=)� ��+j���.�

��NR3���� ����+G3dN -����:�+6+0� ��:.�<�.`<��+������d �3������d M3���`�+�� ;�����d ���� #g3���� +0� ��:�����`��=��+�(��<T.����( -+NL�����'&V+<�

F0 := 0,

F1 := 1,

Fn := Fn−1 + Fn−2, n > 1.

b,�.��+ ���� -��+ #y�<a[�<�0� ��������<��3R��Ng3���� +0� ��:�����`��6��+B3����D+0:�� ��N23����D3k&,�d�.�0�<aF����:�+ ������+�� F�����3�����+ (��<T.����3������ #�&,�B`> ����������(��L �3���~� &%���~3��%(��'&V� "����`<:��0+0��a[�"5XW WxNL:���`<3������NL���,`<���6� :;3����.� ���pi��� �`�`��y�*:�� pC�<��+ #;���7303������ 3��<�������. �30�����d -��(Z`����0�0��`<3�����+0+XNL���%N��0�����

unsigned int fib (unsigned int n)

{

// POST: return value is the n-th Fibonacci number F_n

if (n == 0) return 0;

if (n == 1) return 1;

return fib(n-1) + fib(n-2); // n > 1

}

^_NC�[��:&X����3��% !�.�0������ -�|30�D`<���6� :;3��c3���� ���pi��� �`�`��i��:.� pC�<�Fn

:�+0���.� 30�.��+ NL:��.`73�������#��[��:&V���;����3���`��,3��. �3j+0�����<&V���<�0�cpC�73s&,�<���

n = 30 -��(

n = 50#[3����X���������� -�tpi��`�������+ a[�<�0� +0��'& �

x2��:��<a[�<� �.��30��`�� �.�'&)�D:.`��Z+E��M&,�7�%��3,pC�<`�������+ &V�������[��:�����`<���> -+E�np��Drs:�+E3

1�

bc������> -+0��� ��+D3��. �3D3������d M3������d �3���`� -j(��<T.����3������ ��NFn

(�����+ ����3 ��> -(z30� -� � � `�������3 -������0��3���� #>+0����`��, -��a- -�:���+

Fi, i < n−1#[ ��0�g���<�C�� �3���(���"`����6�.:;3���(�#-+0�����j��N;3������Y�7u*30�������<��

��N�3����y�sx2��:=`� -�=NL���"�7u� ��6� �� ` ����`�/ 3��. �3B3����D`> -� 3��fib(50)

`<���6� :;3��<+F48

-~���> -(;� 3k&V��`<�e_����`��D(�������`<30�� ���

fib(n-2)# ��.( ����`�� ����(������<`<3��� N��0���

fib(n-1)�

F47

��+ `����6�.:;3���( 30���0���3������<+ #

F46

T�a[�R3�������+ #F -��(F45

��������3,3�������+be_(�� �[��: +0��� � �303��7��� �Lg7�

3.2.4 Recursion versus iteration F����� c+E3E����`<3�~�RNL:.��`<30�����. -��C������3n��N�aF���<& #����<`�:;��+0����� ��+ +0:;�C�7� !.:.��:�+ #M+0����`��j��3n`> -� pC�2+0���D:�L �3��<(3��;����:����d��3��<�� �3������� ��.( !+G3� -`�/d�7uF�.���`���3���D�d -����3� -���.�<( p*� 3����V���������� -� � � � �B(����0y 3 �. �a[�V3�������> -��+v3��R�����Ma[�c3�����+ ���<��� #[p.:�3 &,�,&c -��323�� +0���M&���32NL���23����c�0��`�:;��+0��a[�cNL:���`<3�������+ 3��. �3 &,�X�. �a[�+0���<� ��� 3����R�����<aF����:.+c+0��`73������y�bc��� NL:.��`<30�����

gcd��+ a[�<�0� �> -+G� 3�� &%���~3��d��3��<�� M3���a[���� # +0���.`<� ��3D��+ �J,.��*PHh��#�B�=>����:4=)���[p�� �

b,�.��+g���> -��+23��. �3g3����<�0�V��+ ������ �����%����`�:;��+E��a[�B`> -� #� ��.(�3��. �3g�����B ����C�> ��0+ �3g30�.�Xa[�<�0������(d��N3���� NL:���`<3������ pC��(;�[�Vb -���� ����(��0��`�:;��+0����� `> �� pi� ���<�.L -`��<( p�� +0���6� ��"������ 3��. �3V�~3��<�� �30��a[����:;�C(. �3���+B3����DNL�����d -�� ��� -���<3��<�0+B:.��3��� 3���� 3��<�0�����. �3������ `�����(���3������ ��+ +0 �3���+ET.��(y� ^_� 3����D`� -+0���N

gcd#;3�����+c:��i( M3��R`����0����+G�C����(.+,3��D3���� 30�� -��+0NL�����d �3������

(a, b)→ (b, a����(

b)�

unsigned int gcd2 ( unsigned int a, unsigned int b)

{

// PRE: (a,b) != (0 ,0)

��� �5@��( � �>% �� C A&������ C ��,���,��'���� � �F� �D�� ��> 9�8� :�D�� ��DF ��*�� �6��# �)�� 8 �@��( ��(G

Page 137: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� �>8[o

// POST: return value is the greatest common divisor of a and b

while (b != 0) {

unsigned int a_prev = a;

a = b;

b = a_prev % b;

}

return a;

}

x2��:�+0���V3��. �3g&,�V���<3 ��������<� -��(d���+0+g�0�> -(. �p.��%`<�*(�� #; -��(�3��. �3j&,�V������( -���7uF3E�� !a� M���L �p.��,3���������<�DpC�7�%3����!�����<a*����:�+%a- -�:�� ��N

apC��NL����� 3���� :;�C(. �3��!+E3��<�+zi��� 3���� +E�.���0��3V��N2{*��`73������ �*�@?;�9# #

&,� +0����:.�( 3����<���<NL�����!:�+0� 3����"�����������. - ����`<:��0+0��a[�!NL���0� :�L �30�����y�AR:;� NL:���`<3������

fibNL��� `����6�.:;3������ ���pi��� �`�`��.�*:��Dpi�<��+2��+j����323� -�� � ����( �0��`�:;��+0��a[��#�p.:;3 ��32��+

+E3����i�> -+G�30�D&X����3��R��3,��30�<�� �3��~a[����[� �X�<�����Dpi�<� 3��. �3Fn

��+ 3����R+0:��H��N 3����Fn−1

��.(Fn−2

�2�=�`> -� 3����<�0��NL����� &%�0��3��" ��*����&V����+0� ��30�<�� �3������

i`����6�.:�30��+

Fi

N��0��� 3����!�����<a*����:�+0�� `����6�.:�30��(a- -�:���+

Fi−2

��.(Fi−1

30� M3c&,� �d -����3� -���d���3���� a- ����� �p.���+a -��(

b�

unsigned int fib2 ( unsigned int n)

{

// POST: return value is the n-th Fibonacci number F_n

if (n == 0) return 0;

if (n <= 2) return 1;

unsigned int a = 1; // F_1

unsigned int b = 1; // F_2

for (unsigned int i = 3; i <= n; ++i) {

unsigned int a_prev = a; // F_{i-2}

a = b; // F_{i-1}

b += a_prev; // F_{i-1} += F_{i-2} -> F_i

}

return b;

}

SV�[ -����#�30�.��+ ����� � ����`�:;��+E��a[�6a[�<��+0�����fib2

��+ +0:;p.+E3� -��3��L -�~� ����.���7� -��( ������� (�� � `�:��3!3��:���(.�7��+E3� -��(w3��. -�

fib#,p.:�3�30�.��+63�������3����<�0� ��+ =pC�����<T�3 �

fib2��+�� :�`��wN -+E3��<� #%+0����`�� ��3

`����6�.:;3���+,�<a[�<�E� ��:��DpC�7�Fi, i � n

�'&c, � �V*PDM!$# �h� �j��������B&,�R&,��:��( ���0�M&)���( ��� &c ���3������ NL���3����V`> ��

fib(50)30� 3��<�������. �30� #

fib2(50)���~a[��+ :�+g3����B -��+E&,�7� ������� 3���������e �%��NL���03�:��. �3��<�� #

3�����+R -��+E&,�7�"�d ��Zpi�D���.`<���0����`<3 #C+0����`��F50

`���:��( �> -+E���� �7uF`�����( 3���� a- -�:�� �� -����� ��N 3���� 3k���C�unsigned int

� g^_�z3�����+D`> -+0�&,�&,��:��( ������NL�<�

fib2�'a[�<�

fib#g+E���6�.�� +0����`��

fib��+ 3��*� ����� �6`<������3 NL���

���� -`<30��`> - :.+E���!b,��� ������� `����6�.���`� �3���(ZNL:���`<3������ (��<T.����3������ ��Nfib2

��+R 6����(��<�� �3�� ������`�� 3��� �� NL���X3����"+G�C����(�:;�Z3��. �3c&,�"���73>�

3.2.5 Primitive recursion�X��:�������+E�C�� �/F����� #. �d �30�.�<�d �3���`> � NL:���`<3������Z��+ (0= �/8Y�����[p��F=>�h�>:4=)���[p�� ��N ��3%`> -�ZpC�!&X����3030��� -+, 5cW"WxNL:.��`<30�����

f���+0:�`��Z "&c ���3��. �3

f������30�.�7�,(.�~����`<3�~�6�����,����(�������`<30�� `� -��+ �~3�+0���NC&%��3��

Page 138: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>8�# ������� ����� �q�� ��� � � � ���

`> -�y� ��� -���<3��<�0+ (.�7�C����(������ ���f� ;���%�7u; -�6�.�� #

unsigned int f ( unsigned int n)

{

if (n == 0) return 1;

return f(f(n-1) - 1);

}��+j�.��3 -���'&,��(�#[+0����`��

f����`�:;��+E��a[���� `> -��+2��3�+E���N &%��3��� R� ��� -���<30�<�g(��<�i����(.���.�"��N

f� bc����+j(.����+

# !.� ���> -� 3��. �3B3���� :��.(��<�0��F�������d �30�.�<�d �3���`> �CNL:.��`<30����� ��+B�.��3B����������3���a[� ����`�:;��+0�~a[� #C��3 rs:�+E3���> -��+ 3��. �3!&,� � �a[�63� M/[��� 3���� &%�0���.� 5cW"W\NL:��.`73������y�^_�.(����<( # 3����� �pC�'a[�

f���6�.������<��3�+

3����D�d �3������d �3���`> -nNL:.��`<30����� +� �30��+0N��F���.�f(n) = 1

NL���! -�n#� ��.( 3�����+"NL:���`<3������=��+ ��p*a*����:�+0��

����������30��a[�%����`<:��0+0��a[���^_�z3�����> �����

20�_3�� `�����30:��E� # ��3 &c -+ pC������<a[��( 30� M3D30�.�NL:���`<3�������+ &V����+0�da� ��:���+ `� -�4���

��������`����.�� pC�6`<���6� :;3��<(=p*� �d -`�������� M���6�7u; -`<3��� 3���� ���������~3���a[� ����`�:;��+E��a[�6������+�� ^_��(.�<��(�#3����NL:.��`<30����� a- -�:���+D����� `����6�.:;3���+ ��� ���� -`<3���`�� e_����`��:�(������ ��`�(

(a, b) -��(

Fn

g `������dN����������������30��a[�%����`<:��0+0��a[�!NL:���`<3������.+<�^ 3cL �3��<�,3�:;������( ��:;3c30� M3 3����<���" ����R`����6�.:;3� �p.��VNL:���`<3�������+ 3��. �3c ��0�"����3 ����������30��a[�X���<`�:;� �

+0��a[�-� SO+0���6�.��6 ��.( &,�����_/*�.�'&V� � u� -�6�.�� ��+ 3����6p.���. ��0� � � Zw�>= 8G,.#I# Kh:4# � ���"!$#A(m, n)

#(��<T.����(�p*�

A(m, n) =

n + 1,��N

m = 0

A(m − 1, 1),��N

m > 0, n = 0

A(m − 1, A(m, n − 1)),��N

m > 0, n > 0�

^ 3%��+X����3X��������(��L �3��<��D`���> ��,3��. �3c3���� `����0����+G�C����(.���.�65XW W NL:��.`73������

unsigned int A ( unsigned int m, unsigned int n) {

// POST: return value is the Ackermann function value A(m,n)

if (m == 0) return n+1;

if (n == 0) return A(m-1,1);

return A(m-1, A(m, n-1));

} -�&c ��*+j3��<�0�����. �3���+ #[p.:;3 1 u;�<��`<��+0�"I�# -+E/*+ �[��:30� +0���M& 3�����+��2b �p.��VI!���+E30+g+0�����XSV`�/[�<���d -���NL:���`<3������ a- -�:���+<� ;���

m � 3#A(m, n)

��*��/*+ ��:���3��c���*(��<�� �30� #�p.:�3g+E3� ��E3������"N��0���m = 4

#[3����a- -�:���+����73��7u*30�������<��RL ������-�ux2��: `> -�!+E3�����`<���6� :;3��

A(4, 1)#M -~3�����:.���R3�����+y3� �/[��+ +0:;�0������+0���.��~�

������V �����> -(;�[�0x2��: 86�[@$�c� pC� Mp ��23��%`����6�.:�30�A(4, 2)

z- -N�30�<� -� #265536−3

�. -+ �E������ �V ��0��:.��(20, 000

(���`����d � (�������30+����g:;3V3���� `> -� 3��A(4,3)

&%���y����3V3��<�0�����. �3��B&V��30�.��� -������p.+0�<�0a- �p.���C�<�0���*(y�^ 3 `> �� ��� N -`<3 pC� +0���'&V� 3��. �3

A(n, n)�����'&V+ N -+E3��7� 3��. -� -���"���������~3���a[� ����`<:��0+0��a[� NL:���`<3������

���n� �X��`�:;��+E����� ��+" d�i�M&,�<�0NL:. p.:;3 -�+0��(. -�����<����:�+R3��*�� #n+E����`�� �~3!��+ �> -+G� 3�� ����`��*(���e 3����5g

`����6�.���`� �3���(d`����6�.:;3� �3������.+j&V��3��a[�<�0� NL�<&x�������+,��N `���(����

3.2.6 Lindenmayer systems{*�6N ��%��3c+0������+c3��. �3c3���� pC�<�.�7T.3X��N :�+0�����D����`�:;��+0�~a[�!NL:���`<3�������+%��+c3��. �3c&,� �d >����<3 e_�����(.~� g+0���6�.��7� NL�����D:.� �3�������+ #�`����6� �����(d3��D� �*:���a- -��<��3c��3��<�� �3���a[�Va[�<�0+0������+��j^_� 3�����+,+0��`73������ &,�R&c -��3

Page 139: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� �>8�q

n

m

0 1 2 3 ����� n

0 1 2 3 4 ����� n + 1

1 2 3 4 5 ����� n + 2

2 3 5 7 9 ����� 2n + 3

3 5 13 29 61 ����� 2n+3 − 3

4 13 65533 265536 − 3 2265536

− 3 ����� 22.. .2

︸ ︷︷ ︸n+3

−3

Table 5:� !$8�� pw,5*d: �>��! K � � Zw�>= 8G,.#I# � �3K�:4# �>���J!$#

3�� �����<+0����3B -� ����.���`> �30����� ����&V����`������<`�:;��+0����� ��+c������(��������. -��3c ��.( �D:�`�� �������"(�� � `�:��3,3�� �a[����(y� SV+% pC����:.+ #�30�.��+X M�.�.���`> �3�������+ ��<3�+c:.+X(;�� �&UpC�> -:;3���NL:�i�.��`<30:��0��+��mn�73 :�+ T���+E3 T;u �� ,5* (+�4,cS>� �

Σ&V����`�� ��+ +0���6�.��= �T.�.�~3��6+0�<3D��Nc+E�F� pC���+ # NL���D�7u� -�6�.��

Σ = {F, +, −}�!my�<3

Σ (�������3�� 3���� +0�<3 ��Nj -� 1b!$=�B5� 3��. �3R&,� `> -� NL�����lN������ +E�*�DpC���+B���

Σ�

;���%� u� -�6�.�� #F + F+ � Σ

� X�7u*3 #C&,� T;u �NL:���`<3������

P : Σ → Σ �

P�d ��.+V�<a[�<�E� +G�F� pC���3�� 6&,����(�#y -��( 3�����+E� M���

3���� (0=>!�B.: �>���J!$#0� ��� � ��������3,NL���X�7u; -�6�.��R� �a[�R3���� ������(�:.`73�������+

σ �→ P(σ)

F �→ F + F+

+ �→ +

− �→ −

����. -�~� #*&,� T;u� -� �[#I����� ,5*�1k!$=hBs � Σ

#�NL���%�7u; -�6�.��s = F

�bc���D30�����.����

= (Σ, P, s)��+ `> -����( n_�/#�B �>#I8G,.DN�>=?��Dw���<�>8 �6{*:.`�� d+E�F+E30��� �������<�� �3���+

-� ���;T ����30� +0� ��:.�<�.`<� ��Nj&,���0(.+s = w0, w1, . . .

-+RNL�����M&%+�� b�����<3R3���� �.� uF3 &,����(wi

N������3����R�.�0�<aF����:�+,&,����(

wi−1

#�&,�"+0���6�.�� +0:;p +G3���3�:;3�� -�y+E�*�Dpi���+ ���wi−1

p*�d3��������c�����*(�:�`<3������.+<�^_�Z��:;�%� u� -�6�.�� #�3�����+c�*�����(�+

w0 = F,

w1 = F + F +

w2 = F + F + +F + F + +

w3 = F + F + +F + F + + + F + F + +F + F + + +

...

bc��� ���7u*3B+E3��<� ��+c3�� �E(;�� �& �63�����+0�"&,����(�+ #C -��(Z3�����+V���~a[��+%3����!�.��`<30:��0��+%&,� &,�<���"3� -�/*����� �pC��:;3>�

Page 140: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��?[] ������� ����� �q�� ��� � � � ���

p p

Figure 7:���;� ��:N=)�V* ��S>��KL!$=>�6,.#�B2, K��<�>= (0=�!��� �����/#;@ �V�;�Y��!$8Y8�,.#�BR�L� � :u�># ���

F + F+

Turtle graphics.^_�d -�������R 3�:;�03���R+0��3E3������ M3c+0����� �i������3

p��� D� ������R� ����`�� ��N�� ��C�<� #;&%��3��

��3�+B���> �( �C������3���������� +0����� (�������`73�������#i+0��� �����:;���DoRe_��<N�3'g7� b,��� 3�:;�03��� `> ��=:���(.�7��+E3� -��( 3����`������d -��(�+

F#+# -��(

−�

F���> -��+ �E���Ma[�d�����+E3��<�wNL���0&c M��( � #

+���> -��+ �G3�:;���4`���:���3��<� �

`����`�/*&V��+0� p�� -� -������ ��N90(����������<+ � # -��(

−���> -��+��G3�:;��� `���*`�/�&V��+0�Dp*� -� -������ ��N

90(����������<+ �;� b,�.� 3�:;�03��� `> -� �����*`��<+0+ -���=+0� ��:.�<�.`<����Nc+E:.`�� `������d -��(�+ #Cp*� � u;��`�:;3����.�Z30�.�<����43�:;���y�w� � ��0�Z����30�<����+E30��(w���43���������+E:.~3������=� �3��43� M/[��� p*�43�����30:��E3������� 3������.���<`��Z��N� ��C�<���,bc���"� �30� �������<�� �3��<(Zp*�3���� `������d -��(+0� �*:�����`��

F + F+# NL���V�7u� -�6�.���#;��+%+0���'&V� ���

�����:;���6o2e ��������3'g�# -������ &%��3�� 3���� �C��+0��30����� -��( ����������3� M3������=��N 30�.�D3�:;�03��� -N�3��<�"�����*`��<+0+0�����3���� `������d -��(d+0� �*:�����`��-�bc���R3�:;�03���B`� -� 3����<�0��NL����� ���� ��.����`> -�~�6����3��<�0�����<3c �����&,����( �������<�� �3��<( p*� my����(.�<�.�d ��[�<�

+E�*+E3���� �Ma[�<�c3���� ���.� MpC�<3{F, +, −}

Recursively drawing Lindenmayer systems.my�<3

Pi : Σ → Σ

pC�B3����"NL:���`<3������3��. �3,�d ��.+, -���&,����(

w � Σ 30� 3����!&,����(

Pi(w)��p.3� -������(Zp*� 3����

i� NL���( +0:;p.+E3��~3�:;3������Z��N -� +E�*�Dpi���+%���

w -`�`<����(������D3��D3��������,�����*(�:�`<3������.+<� ����30� 3�����+c����3� �3�������#�&,�!�. �a[�wi = Pi(s)

� ;���

σ � Σ# ��<3

wσi

(�������3�� 3���� &,����(Pi(σ)

� {*:;���C��+0� 3��. �3P(σ) = σ1 ����� σk

�Db,�.�<�=&,����<3

wσi = Pi−1(P(σ)) = Pi−1(σ1 ����� σk) = Pi−1(σ1) ����� Pi−1(σk) = wσ1

i−1 ����� wσk

i−1.bc����+2���> -��+v3��. �3 3����c(��� >&%�����"��N

wσi

��+2��p�3� �������( p�� +E���6�.�� `�����`> �30���. �3������B3����X(;�� �&%������+NL���

wσ1

i−1, . . . , wσk

i−1

# ��.( 3�����+,��+c&%���<���"30�.�R����`<:��0+0�����Z`������<+X���y�2b�� ���<3wi

#;&,�" �����:��!���3����+� -���X&c >� 3��. �3 &,�B`> ��+E���6�.��D`�����`> �3����. �30�V3����V(;�� �&V������+g��Nn -�

wσi

#FNL���σ��:����������!3��;����:����

3���� +E�F� pC���+,��Ns�

K �0������ -� �># +0���M&%+ ���M& 30�.��+!&,���0/F+ NL���D��:;� ��:���������� �7u� -�6�.��D&V��30� ������(�:.`73�������+F �→

F + F+, + �→ +, − �→ − -��( ������3��L �i&,����(

F�B{*����`��

Pi(+) = +, Pi(−) = −NL��� -�

i# &,�!(.�

����3%�����<(�3�� +E:�p.+E30��3�:;3��+ -��(

− -��(Z���<3

wi = wFi = wF

i−1 + wFi−1 + .

e 8F���)gb,�.�X�.�0������ -�O -+E+0:�����+j3����V� u;��+E30����`��B��Nn !���p��� ��E�

turtle&%��3��6������(��<T.����(�3�:;�03���%`������d -��(

NL:���`<3�������+forward

#left

e_`<��:.��3��<��`<��*`�/*&%��+0�B����3� M3������d&V��3��+0����� -������)g -��(right

e_`<��*`�/ �&V��+0� �0��3� �3�������+ &%��3���+E�����" ��.����)g �����. -����+G� �`��

ifm�

^_� 3���� (��*`�:�������3� �3������4��N 30�.� ���������� �� #,&,� �. �a[� ������303���(430�.� �G30�0��aF�L � � ������(.:�`<30������++ �→ +, − �→ −

#C -��( ��� +E�C�<`���N��F���.�6 my����(.�<�.�d ��[�<�X+E�*+E3���� #�&,� `> -� (��6+0�d �+%&,��� �2&,�!&V���:�+0:. -���d������d���+E3,�����*(�:�`<3�������+ NL���%+E�F� pC���+ 3��. �3% ���� ����3c�d ����C��( 30� 3�������+0�<�a[��+��

Page 141: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� ��?��

�// Prog: lindenmayer.C

�// Draw turtle graphics for the Lindenmayer system with

�// production F -> F+F+ and initial word F

�#include <iostream >

�#include <IFM/turtle >

void f ( unsigned int i) {

// POST: the word w_i^F is drawn

���if (i == 0)

� �ifm::forward (); // F

���else {

���f(i-1); // w_{i-1}^F

���ifm::left(90); // +

���f(i-1); // w_{i-1}^F

���ifm::left(90); // +

� �}

��}

��

� �int main () {

� �std::cout << "Number of iterations =? ";

� �unsigned int n;

� �std::cin >> n;

� �

� �// draw w_n = w_n(F)

� �f(n);

� �

� return 0;

� }

Program 18:(0=>!�@.� �+*d�/#�B ��#I8�,.D`�>=W r

;���V���;�.:;3n = 14

#�30�.�R���������� -�O&%��� ������(.:�`��R3����!NL�����M&%����� (;�� �&V�����;�

Page 142: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��? � ������� ����� �q�� ��� � � � ���

SV+n���<3�+ L M�����<� #v3������.��`<3�:;����(��*�<+ ����3 +0���<� 3�� `��. -�����d� :�`��0z ��3 ����3� M3���+ #2 -��(z+E�����

�������c(��<3� -���+2(��<a[�<���� #�p.:;3 �� ��03jN������t3��. �3j30�.�X���6������+0+E����� ��+23����%+� ������ SV+0+E:.���c�[��:�`���:��((;�� �&)3���� �.��`<30:��0� NL���

n =∞ �jb,�����Z� ��:. �3�������e 8F���)gg&,��:��(����~a[�

w∞ = w∞ + w∞ + .

b,�.��+B��+R ��� * K>HJ�h�/86�/* ,.= �/��D �X3���� (;�� �&V��������Nw∞

`�����+0��+G3�+B��N23k&,�d����3� �30��( (;�� �&%������+V��Nj�~3�+0���N �� � �. �a[� K�=�, � �J,5* �

Additional features.�=� `> -� �7u*3�����( 3����!(��<T.����3������Z��N mn���.(������d ��[�<�X+E�F+G3���� 3�� ����`��:�(��!

����3� M3������ ��.����α3��. �3!�d �� pi� (���hi�7������3!N������

90(�����������+<� b,����+!��+!+0���'&V� ��� Kv�������� �� �>q

3��. �3c(;�� �&V+X D+E�.�'& ! �/[� NL���V�����.:;3n = 5

�// Prog: snowflake.C

�// Draw turtle graphics for the Lindenmayer system with

�// production F -> F-F++F-F, initial word F++F++F and

�// rotation angle 60 degrees

�#include <iostream >

�#include <IFM/turtle >

void f ( unsigned int i) {

// POST: the word w_i^F is drawn

���if (i == 0)

� �ifm::forward (); // F

���else {

���f(i-1); // w_{i-1}^F

���ifm::right(60); // -

���f(i-1); // w_{i-1}^F

���ifm::left(120); // ++

Page 143: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� ��?[8

� �f(i-1); // w_{i-1}^F

��ifm::right(60); // -

��f(i-1); // w_{i-1}^F

� �}

� �}

� �

� �int main () {

� �std::cout << "Anzahl Iterationen =? ";

� �unsigned int n;

� �std::cin >> n;

� �

� // draw w_n = w_n^F++w_n^F++w_n^F

� f(n); // w_n^F

� �ifm::left(120); // ++

� �f(n); // w_n^F

� �ifm::left(120); // ++

� �f(n); // w_n^F

� �

� �return 0;

� �}

Program 19:(0=>!�@.� �+��# !$1 � ,5Zw��W r

b��6���<3%������� ! � u;��p.����~3s� #�&,�!`> -� -�+0� �7u*3�����( 3���� -~� �. �pi�<3��N +E�*�DpC���+�� ;���V�7u; -�6�.�� #

&,�V�d �� -(�(�+E�F� pC���+ &V��30�.��:;3g -��� ���� ��.����`> -.����3��<�0�����<3� �3������0z[3�����+0�B ��0�V+E3���� :�+0��NL:� #�3�����:���� #+0����`�� 3����<� �d �� pi�Z:�+0��(���� �.�0�*(�:�`<3�������+�� ;���d�7u� -�6�.���#g3���� my����(.�<�.�d ��[�<� +E�F+G3���� &V�~3��Σ = {F, +, −, X, Y}

#*���.�~3��L - &,���0(X -��(�������(.:�`<30������+

X �→ X + YF +

Y �→ −FX − Y

�F�����(�+ 3���� B.=�,$@�!$# �>:4= pw� ew14

#. -������R��N90(����������<+ g7�

b,�.� `����0�0��+E�C����(������ `<�*(��!��+,+0���'&V�Z��� K �0������ -� ��]F�

Page 144: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��?�? ������� ����� �q�� ��� � � � ���

�// Prog: dragon.C

�// Draw turtle graphics for the Lindenmayer system with

�// productions X -> X+YF+, Y -> -FX-Y, initial word X

�// and rotation angle 90 degrees

�#include <iostream >

�#include <IFM/turtle >

void y ( unsigned int i); // necessary: x and y call each other

���void x ( unsigned int i) {

� �// POST: w_i^X is drawn

���if (i > 0) {

���x(i-1); // w_{i-1}^X

���ifm::left(90); // +

���y(i-1); // w_{i-1}^Y

���ifm::forward (); // F

� �ifm::left(90); // +

��}

��}

� �

� �void y ( unsigned int i) {

� �// POST: w_i^Y is drawn

� �if (i > 0) {

� �ifm::right(90); // -

� �ifm::forward (); // F

� �x(i-1); // w_{i-1}^X

� �ifm::right(90); // -

� y(i-1); // w_{i-1}^Y

� }

� �}

� �

� �int main () {

� �std::cout << "NUmber of iterations =? ";

� �unsigned int n;

� �std::cin >> n;

� �

� �// draw w_n = w_n^X

� x(n);

� �return 0;

� �}

Program 20:(0=>!�@.� � B.=h,$@c!$#�W r

Page 145: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� ��?�I

����. -�~� #����.�c`> -�6 -(�(6+E�F� pC���+v&%��3�� ���� ��.�.��`> -;����3��<�0�����<3� �3������y�v5 ������������":.+E��(�+E�F� pC���+ ����

fe�rs:.�6�������!+E3��7� NL���0&c ���(�#;3�����+c(.����+0�0y 3%��> �a[� 30�� �`��)g�#

[e ��������� pC�<�,`�:;�0�0����3V�i��+0��3������Ng

-��(]e�rs:��6�=p -`�/ 30�ZL -+E3 �������<�DpC�7����( �i��+0��3������Ng7� ^ 3"��+ -�+0� 3k�*�.��`� -v3�� -(�( ���<&|+E�F� pC���+

&V�~3�� 3���� +� -���R����3��<�0�����<3� �3������ -+F#�+� ��[�

3.2.7 Details

Lindenmayer systems.mn����(������d ��[�<�v+E�*+E3�����+ M���,� �����(D -N�3��<� 3���� (. -����+0� p.�����������+E3�S%����+G3���(��

my����(.�<�.�d ��[�<� e��>q ��I � �>q�#[I$gR&%���Z�.�0���C��+0��( 3������ �����>q�P�#�3�� ����(���j3����6���0�M&X3�� ��N,�.L ���3�+��my����(.�<�.�d ��[�<� +E�*+E3�����+Ye &V��30�z�������<�� ��� � �30������+D3�� 8 � (���������+0�����. -g+E� -`��)g �. �a[�ZNL��:���( �d -��� ����.���`> M3�������+ ��� `����6�.:�30�<�c���� ��.����`�+��

3.2.8 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g�:��.(��<�0+E3� -��( 3����6`�����`��<��3 ��N ���<`�:;��+0������# -��( &V��� ��3!�d �/[��+!+E����+0��3�� (��<T.�.�6 �NL:��.`73������3��;����:����Z��3�+0�<�NVz

�$g�:��.(��<�0+E3� -��(Z3����!+E���d -��30��`�+,��N ����`�:;��+E��a[�!NL:���`<3������ `� -��+c -��(ZpC�! >&c M���"3��. �3c3����<� (��6����3 -�&c ��F+,3��<������� M3��z

8.gd ���������`��L M3��B3���� �C�'&,�<�X��N�����`<:��0+0�����Z��� (;�� �&V����� mn����(������d ��[�<�,+E�*+E3�����+��

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)g�T.��( ������� -��(��i��+E3�`�����(���3�������+ NL���X����a[�����0��`�:;��+0��a[�"NL:��.`73�������+>zek} �$g������'a[�!���X(���+E�����'a[� 30�<�������. �3������d -��(Z`����0���<`<3�����+0+X��N�����`�:;��+E��a[�!NL:���`<3������ `> -��+>zek} 8.g�3E�� -��+0L �30� ����`<:��0+0��a[���d �3������d M3���`> -�NL:.��`<30����� (.�7T ����30������+"����3�� 5cW"W\NL:.��`<30����� (.�7T �����

3������.+�zek}R?5g��0�<&%���~3�� D����a[�<������`�:;��+E��a[�!NL:���`<3������ �����~3��<�� �30��a[�RNL�����Rzek}"I$g��0��`�������� � � ����� �6`<������3c����`<:��0+0��a[� NL:.��`<30������+% -��(Z���6�.�0�Ma[�B3��������,�C�7��NL�����d -��`��zek} P.g�&X����3��B���<`�:;��+0��a[�"NL:.��`<30������+cNL���%����a[����3� -+E/F+<�

3.2.9 Exercises

Exercise 57�m�/#�B9(0=>� H ,.#�B9(I!.�>�<�h!$#�B.�����"!$#0��KL!$= �V�;��KL!.*/* !$13�[#;@�=>���>:N=)���/pw��Kh:4# � ���"!$#0�LW ek} �)g

gbool f (int n)

{

if (n == 0) return false;

return !f(n-1);

}

Page 146: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��?[P ������� ����� �q�� ��� � � � ���

p4gvoid g ( unsigned int n)

{

if (n == 0) {

std::cout << "*";

return;

}

g(n-1);

g(n-1);

}

`)gunsigned int h ( unsigned int n, unsigned int b) {

if (n == 1) return 0;

return 1 + h (n / b, b);

}

Exercise 58a =�!$p��C!$=CB.�/�"(0=>!$p�� K�!$=�,.#ID ! K2�V�;� K�!.*/* !$1��/#;@C=>�h�>:4=)�h�/p�� K�:N# � ���J!$#0�M�V�4,5� �/�

�<�>= 8Y�/#�,5�<� �3K�!$=Y,5*[*4(I!.�>��� S)* �k(;,.=h,.82� �<�>=)� W ek} �$g

gunsigned int f ( unsigned int n)

{

if (n == 0) return 1;

return f(f(n-1));

}

p4gunsigned int A ( unsigned int m, unsigned int n) {

// POST: return value is the Ackermann function value A(m,n)

if (m == 0) return n+1;

if (n == 0) return A(m-1,1);

return A(m-1, A(m, n-1));

}

`)gunsigned int f ( unsigned int n, unsigned int m)

{

if (n == 0) return 0;

return 1 + f ((n + m) / 2 , 2 * m);

}

Exercise 59, \ = ���<�b, rkt9t K�:N# � ���J!$#6�V�4,5���h!$8X(0:;�<�>�bS �[# !$86� ,5*N��!�� � �>�"�>#0�V� � n

k

�, n, k �

� WY�m�;� �L�X8G,.D S>�YB � { # �hBR�[# pw,.= �"!$:;� � � :N�/pw,5* �>#0� 1�,.Dq�LW � !$=Y�'& ,.8X(+* �>A�n

k � :=n!

k!(n − k)!,

Page 147: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� � ��� � � �� ��� ��?�o

!$= �n

k � :=

0,� K

n < k

1,� K

n = k!$=

k = 0�n−1

k

�+�n−1

k−1

�,

� Kn > k, k > 0

,

!$= �n

k � :=

0,� K

n < k

1,� K

n � k, k = 0nk

�n−1

k−1

� � Kn � k, k > 0

S \ ���J�>� ! Kf�V�;�F�V��=����Fpw,.= � ,.#0�V�9�/� S�� �>� �h:4���<�'BsKL!$=F�V�;� �[8X(+* �>82��#0�J,5���J!$#IA�,.#�BR13��D �ek}"8.g'ek}!I$g ek} P.g

Exercise 60� ��13= �/�<� �V�;� KL!.*/* !$1��/#;@ =>�h�>:4=)���[p��3K�:4# �>���J!$#0�s�/#]���<��=�,5���/p���KL!$= 8 ,.#�BY�<� �>��1��/�V�

, (0=�!�@$=�,.8 13�;� �V�;�>= D`!$:4=9���<�>=�,5���[p��Fp���=)���J!$# ��� ��!$= =>�h� �JW ek}R?5g g

unsigned int f ( unsigned int n)

{

if (n <= 2) return 1;

return f(n -1) + 2 * f(n-3);

}

p4gunsigned int g ( unsigned int m)

{

if (m == 0) return 1;

return g (m / 2) + g (m - 1);

}

Exercise 61\ = ���<�X, (0=>!�@$=h,.8

dec2bin2.C�V�4,5�m�[#�(0:;�V�i,F#�,5��:N=�,5*I#I:48�S��>=

n,.#�B6!$:;� (0:;�V�

�V�;�XS>�/#�,.= DRB.�[@$�/�V�X! Kn�J# !.� �[# =>�>pw�>=)���F!$=�B ��= ,5� �[# ^ & �>=>�>�/��� � �wA�S :;�m�[# # !$= 8�,5* !$=�B ��= W

� !$=6�'&c,.8X(+* �>AuKL!$=n==2

�V�;�Y!$:;� (0:4�����10

,.#�B K�!$=n==11

�V�;�6!$:4� (0:;���/�1011

W � � � Exercise 62

\ = ���<�X(0=�!�@$=�,.86�6�V�4,5��(0=>!LB.: ���?��:4=)�V* �Y@$=�, (+���"� �RB.=�,.1��/#;@.�kK�!$=?�V�;� K�!.*[* !$1��/#;@n_�/#�B �>#I8G,.DN�>= ��Dq�>�<�>8?�

(Σ, P, s)W ek} P.g

gΣ = {F, +, −}

#s = F + F + F + F

-��(P����a[����p��

F �→ FF + F + F + F + F + F − F.

p4gΣ = {X, Y, +, −}

#s = Y

#� -��(P����a[����p��

X �→ Y + X + Y

Y �→ X − Y − X.

;���%30�.�"(;�� �&V����� #;:�+0�"�0��3� �3������� -������α = 60

(������0����+V ��.( ����3��<�E�.�0�<3 S�!.�V�X -��(

Y -+

�E���'a[�R���.� +E3��7� NL���0&c ���( �;�

Page 148: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��?[# ������� ����� �q�� ��� � � � ���

`)g my��/[�Rp;g�#Fp :;3c&V��30� 3����R�.�0�*(�:�`<3�������+

X �→ X + Y + +Y − X − −XX − Y +

Y �→ −X + YY + +Y + X − −X − Y.

Page 149: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Chapter 4

Classes

��?[q

Page 150: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'I�] �_� ��� ����� �q � �+� �

4.1 A first C++ class

�����������h� ���J!$#��/#0��=>!LB.: ���>�X� *-,5�>��� �hA_�V�;� rbtXt �h!$# ���J(+�NK�!$=fB � { #I�/#;@ ,X# �>1 ��D)(I�S D?�"(I����� K�D5�/#;@Y���V� Kh:4# � ���"!$#�,5*P�/��D2,.#�B6pq,5*P:u�9=h,.#;@c��W \ �91���*[*��>�;!$1�,���!$# ��=>� �<�� *-,5�>� KL!$=9=h,5���J!$#�,5* #I:N8�S>��=)� ,.#�B��'&)(+*-,.�/#C,5*/*+���V�i��D5#0�J, � ���"�h,5*m,.#�BY���>8G,.#0���J�h,5*,5�"(;��� �V�LW

{*:;�.�i��+0�D&,� &c -��3 30��:�+0� =�,5���J!$#�,5* #I:N8�S>��=)� ��� ��.�0������ -� #i�_� ����#y��:.� pC�<�0+B��Nj3����DNL�����n/d

#*&%�.�7���VpC��3��d�*:����<�� �3���� ��.((������������. �3����j ����B����3������7��+��j5XW W (��*�<+ �.��3 � �a[�R NL:���(. �������3� -i3k�*�C�"NL���%�� M3������. -C�*:�� pC�<��+ #.+E� &,�!�. �a[�"3�� ���6�.���������3 3������H��:;��+0���a[�<+�� ^_� ����(��<�c3��(��63�����+ #�&,�!������( +0�����"����`��. -����+0�\3��6����30���*(�:�`��! ���<& 3k���C� #i ������� &V�~3��Z��3�+%NL:.��`<30�����. -���3k� -��(�a- -�:��R�� -�����z� -N�3��7�B -� #*3�����+,��+,&V�. �3c�d �/[��+,:;� 3s���C�9e_+0��� {*��`<3������ �*�����JI$g �^_� 5cW"W # �>* ,5�>�L� � ���� :�+0��(=30� (��<T.��� ����<& 3k�*�i� �V��=>!$:`@.� ��3�+RNL:��.`73������. -���3k�Z -��( a- -�:��

�� -������� ^_� (���+0�����������Z `�L -+0+"&,� 3����<����NL���0��� �a[� 30�Z3������;/ �pi��:�3"3����6(���+0���0��( NL:.��`<30�����. -���3k� -��( a- -�:��R�� -�����RT.�0+E3>�2$%�<��� ��+,&V�. �3 &,� ��������3,� uF�C��`73%N������\3���� NL:.��`<30�����. -���3k�6��N� �� �3������. -�*:�� pC�<�v3k�*�i��� 1 a[�<� ��N�3�����+v���+G3v��+v����32`����6�.��<3�� NL��� 3���� �� M3������. -F��:.� pC�<�0+ �[��: �. �a[�X��� ������(�#��3c`�����3� -����+,+0����� NL:.��`<30�����. -���3k� 30� M3%�d �/[�<+,30�.�R3k�*�C�" -��0�> -(;� �*:���3��R:�+0��NL:�_�

� ������30�L -�� � �3������6N��0���H3k&,� ����3������7��+n -��(

de → n/d

g� ������30�L -�� � �3������6N��0��� ����� ����3��<���<�

ne → n = n/1

g� -`<`���+0+%30�D3���� �*:����<�� M3����

n� -`<`���+0+%30�D3���� (������������. �3����d� ��0��3������<3���`%���C�<�� �30������+ke

+#-#*#/# ��.( 3����! -+E+0������������3 a[�7��+0������+ g

� `����6� ��0��+0����+�e==#!=#<#>#<=#>=

g� ��:;30�.:;3ke

<<g

Table 6:� ,5���J!$#�,5* #I:48GS>�>= Kh:4# � ���"!$#�,5*P�/��D

^_� 3����c+0���6�.���+E3�a[�<��+0������#�3����,a� -�:.�,�� -�����,��+ 3����,+0�<3j��N �� �3������ �F�*:�� pC�<��+v&V�~3�� ��:����<�� �3���� -��((.�<�.������� M3���� ��Ny3k�*�C�

int�jb,����+ +0:�������+E30+X =>�"(0=>� ���>#0�J,5���"!$# ��N �� �3������. - �*:�� pC�<�c -+,

� -���c��N ����3������<�0+��mn�73 y@+D+E3� ��E3D&%��3�� +E30�������C�<( �_(��M&%� a[�<�0+0�����4��NX��:��D���<&O3k�*�i��� bc���dNL�����'&V�����Z���������� ��

(��<T.����+ %`�L �+0+Rational

#�p �+0��(D��� 30�.� 3k���C�int

� ^ 3 3������D(.�7T ����+ %a- ����� �p.��g��N;3���� ����+E:.~3������3k�*�C�

Rational&V�~3��a- -�:��

3/4#. -��( T.�. -�~�6��������30+X��30+c��:����<�� �3����X -��( (.�<�.������� M3����>�

�// Prog: rational .C

�// Define and use a class for rational numbers

�#include <iostream >

�#include <cassert >

�class Rational {

�public:

Page 151: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �'IF�

Rational ();

// POST: *this is initialized with value 0

���

� �Rational (int n, int d);

���// PRE: d != 0

���// POST: *this is initialized with value n / d

���

���Rational (int n);

���// POST: *this is initialized with value n

� �

��int n();

��// POST: return value is the numerator n

� �

� �int d();

� �// POST: return value is the denominator d

� �

� �private:

� �int n_; // numerator

� �int d_; // denominator; invariant: d_ != 0

� �};

� Rational :: Rational ()

� �: n_(0), d_(1)

� �{}

� �

� �Rational :: Rational(int n, int d)

� �: n_(n), d_(d)

� �{

� �assert (d_ != 0);

� �}

� Rational :: Rational(int n)

� �: n_(n), d_(1)

� �{}

� �

� �int Rational ::n() { return n_; }

� �int Rational ::d() { return d_; }

� �

� �int main()

� �{

� Rational r(3,4);

� std::cout << "Numerator = " << r.n() << "\n" // 3

� �<< "Denominator = " << r.d() << "\n"; // 4

� �

� �return 0;

Page 152: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'I � �_� ��� ����� �q � �+� �

� �}

Program 21:(0=>!h@.� �0=�,5���"!$#�,5* W r

4.1.1 Class definitions and implementationsSx`�L -+0+c(��<T.����3�������. -+c30�.� NL�����

class� �� � � �

� � ��� − � � � � � ��� �~����� � ��� − � � � � � ����wz

&V���<�0� � � � � ��+ -� ��(�����3���T.�<�>��bc���g+E� �*:�����`�� ��N�� � ��� �

� � � � � ��� y@+y�d �� pi� ���6��3k�[��12 -`�� � � ��� �

� � � � � ��� ��+g����30�.�7� -� , �h��� ���s�"(I�h�>� { �>= epublic:

���private:

g�#���� 82�>8GS>�>=FB �h� * ,.=h,5���J!$# �^_� ����+G3 `> -+0��+ #* 82��8�S>��= B ��� *-,.=�,5���"!$# ��+ B(���`�L M�� �3������D+E3� M3���������3 3��. �32(���`�L ��0��+2 RNL:���`<3������ #���% a- ����� �p.����j5,������`<3��~a[���� #�30�.�<+0�! M���"`� -����( 82��8�S>��=)� ��Nn3����"`<L -+0+ #. -��(3��������c�. -����+ �D:.+G3pC����(�����3���T.�<��+<� SO`<L -+0+ ����30����(.:�`��<+ ���<& 3s���C� #2 -��( 3�����+ 3k�*�C����+ `� -����( � *-,5�>�R��D)(I� #j -+�����C��+0��( 3��6 NL:��.(. -���<��3� - 3s���C���S�NL:.��`<30�����=(���`�� ��� �3������ ��� 3���� `�L -+E+ (��<T.����3������ ����30����(�:.`<��+ 8��>8�S��>=sKh:4# � ���"!$# ��N23����

`�L �+0+ #� -+����int n()

�v1 a[�7�0� ����� pC�<� NL:��.`73������ (���`�L M�� �3������!� :�+E3�� �a[� X�d �3�`��������X(��<T.����3������+0�����<&%���<������^_� ��:���`> -+0��#-3�����+0� M�.�i�> �� ��������(��L �3���~�V -N�30�<��3����j`�L -+0+ (��<T.�.�~3������y��b,���g����� pC�<�NL:���`<3������ (.�7T ����30������+cNL���0�H3���� � *-,5�>�9�[8X(+* �>82��#0�J,5���J!$# �Sxa- ����� �p.��R(.�<`�L ��� M3����������30�0�*(�:�`���+X Bc,5�J,682�>8GS>�>= #.���/[�R���

int n_�

Class Scope.SV���d(���`�L ��� �3��������� `<L -+0+,(��<T.����3������d��+,+� -��( 3��D�. >a[� � *-,5�>�f����!>(;� �jS%�3�����:����

��3�+%(.�<`�L ��� M3���a[�!���<������� ��+%3���� `�L �+0+V(��<T.����3�������#.��3�+%�C��30����3��� -�+0`<���C� -�+0�����.`<�:�(.�<+X3���� NL�����d -� ��� -���73��<� ���+E3�+ -��( pC��(.����+ ��NX -�g���<�DpC�7� NL:���`<3������ (��<T.�.�~3�������+�� ^_N 3k&,� `�L -+0+ (��<T.����3������.+NL�����x(���+ rs������3n(���`�� ��� �3��~a[� �0����������+ #�30�.�7���g��+n���X������p.����)���!:.+E�����c3����j+� -��� �. -��� NL��� ����� pC�<��+��N pi��3��Z`�L �+0+0��+��

4.1.2 Data membersb,�.�X(. �3� "���<�DpC�7��+v���<������+0�<��3, `�L -+0+j��p rs��`73>� bc�����~�g�C��+0+E��p.��ca- -�:���+j����(�:.`<�X3����Xa- -�:��c�� -�������Nv3���� `�L �+0+V3k�*�C���V1j -`�� ��p rs��`73B��Nv3���� `�L -+E+V3s���C� �. -+B -� ����(���a*��(�: �y�0��������� ��N ���������0�NL���+E3����0�����!3����%a- -�:���+ ��NC��30+g(. �3� �����Dpi�<��+��vb,���V(. �3� �����Dpi�<��+j ����%3����<�0��NL����� �E�'&V����( �!p*� 3������p.rG�<`<3>�d^_� `> -+E� ��N 3���� `<L -+0+

Rational#�(.�<`�L ������.�d3k&,�Z(. �3� d����� pC�<��+R��N 3k�*�C�

int���> -��+

3��. �3c�> -`�� ��p.rs��`<3X��N 3����R3s���C�Rational

��+c�0�<������+0����3���(Zp��3k&,�int

y +��

4.1.3 Member functions����� pC�<� NL:���`<3�������+2 ����,����3����d �30����R3�����( 3��B3����,`�L -+E+j ��.( (��<T.�.� 30�.�,NL:���`<3������. -���3k� ��N�3����,3k���C�3��. �3V&,� ���6� ���������3,3��;����:���� 3���� `�L -+E+�� ����� pC�<�RNL:���`<3�������+B ��0� �E+0�. �����( ��p*� -����p.rG�<`<3�+B��N

Page 153: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �'I�8

3����,`�L -+E+ 3k���C��� ^_� ���0(.�7�230�"`> ��; B����� pC�<�vNL:���`<3�������#�&,�,������(� �� ��p.rs��`<32��N 3����,`�L �+0+v3s���C�,NL���&V����`��Z&,�"`> -�n3����!NL:���`<3�������# -��(Z3�����+%��p.rs��`<3V��+V -� ���6�.���`<��3 `> -�n� ��� ����<3��<�X��N 3����!����� pC�<�NL:���`<3������ `> -�_�2b,���"�������<�� - +G�F��3� Mu ��N �����Dpi�<�,NL:��.`73������Z`> ��C��+

��� � � ��������� � � � � � e ��� � � ��������� ��#y���~��# ��� � � ����� ��� �Og

$%�<�0� # ��� � � ��������� ��+� -� � uF������+0+E����� ��N; ,`�L -+0+n3k�*�C�jNL����&V����`�� c����� pC�<�yNL:���`<3������ `> �����( � � � ���+ (���`�L M����(�# ����� � ��������� ��#����<� ����� � ��������� � �����3�����`> -� � M�� -���<3��7��+ # -��(

.��+ 3���� 82�>8GS>�>=

, ���h� �>�2!>(;�>=�,5�<!$= ������� � ��������� � :�+E3 ����NL�7� 3��Z+0����� ��p rs��`<3 # -��( 3�����+"��p rs��`<3!��+"30�.� ���.�D3����NL:���`<3���������+g`> -���<(�NL���>� �%+0:. -��� # ��� � � ��������� ��+ -���a- -�:�� #*NL��� �7u� -�6�.��% "a- ����L �p.��X��Ni3����V`�L �+0+3k�*�C�-�^_� 30�.� ���������� -� �pC�'a[� #i3���� `> ��

r.n()���73�:;����+V3���� �*:����<�� �30���V��N 3���� �� �3������. -n�*:�� pC�<�

r�����3������� R����� pC�<�2NL:��.`73������

f��NC `�L -+0+ #* -��� ���<�DpC�7�jNL:���`<3������

g��N 3����%+� ����X`�� -+0+j3k���C�

`> -� pi�6`> -����( :�� �*:. -���T.��( e &V�~3�����:�3R3���� +0`����C�6���i�<�� �3����::

g�# -��( 3�����+,rs:�+E3 ���> -��+R3��. �3g��+B`> �����( NL���R3���� +� -��� ��p.rs��`<3 -+

f�!^_� -���Z�����Dpi�<�BNL:���`<3������ pC��(�� # 3����D� uF������+0+E�����

*this����NL�7��+c30�D3����R��p.rG�<`<3cNL���c&%����`��3����RNL:���`<3������d&c -+,`> -����(�e {*��`<3������?;� � �7u*�.L -����+ 3�����+ ����3� �30�������� (.�73� -�� g �1 a- -�:. �30�����w��N" ���<�DpC�7�6NL:���`<3������w`> -�%�����*`��<��(�+���/[��3���� �<a- -�:. �3������ ��N -������(����. ��0�

NL:���`<3������"`> -�_� b,�.�2��p.rG�<`<3nNL��� &%�.��` �R3����2NL:.��`<30�����!��+y`> �����( `�������+y��� &V�����!���<�DpC�7�CNL:��.`73�������+ ����B`� -����(d:�� �*:. -��~T �<( #� -��(d&V�����d(. �3� ����� pC�<��+g ����R -`<`���+0+0�<(����d3����BNL:��.`73�������pC�*(;� � 30�.�<+0�(. �3� �����Dpi�<��+j ����%3�������3����X���.�<+ �M&%�.�<(6p*�63����X��p rs��`<3�� ;��� � u� -�6�.�� #�&%�.�<�d&,�%`> -�

r.n()#

3����B(. �3� !���<�DpC�7�n_ M�.�i�> �������� ���3����B+E3� �3���������3

return n_;��+j3����B�*:����<�� �30��� �M&%����(p��

3����R�� �3������. -C��:��DpC�7�r�

����3������6����� pC�<� NL:���`<3������.+ #�&,�%`� -�d -�+0�"`> -�.����� pC�<� NL:���`<3�������+jNL��� ��3����<�g�7uF������+E+0������+ ��N3���� `�L -+0+c3k�*�C�9e_���/[�R&,� (.� ��3X��:�30+0��(��B3����!`�L �+0+ g�#�:�+0����� 3����!����� pC�<�c -`<`���+0+X���C�<�� �30���>�gQR �3� ����� pC�<��+2��Ny ��0p.��3E�� ��0� `�L -+E+g3k�*�C�V��p.rs��`<3�+g`> -� -�+0�"pC�B -`�`<��+0+0��(d3��;����:����63����V����� pC�<�g -`�`<��+0+���C�<�� �3����>�"^_N � ��� � ��������� ��+R ��=�7u*�.�0��+0+0����� ��Nj`<L -+0+V3k�*�i� ��.( � �� � �D��+V3���� �. -��� ��Nj d(. �3� ����� pC�<� #�3����"�7u*������+0+0�����

��� � � ��������� � � �� � �

����NL�7��+%3�� 3����"`<���0����+E�i���.(������ ( M3� �����Dpi�<�,��N 3���� ��p rs��`73XpC�<�.���.( ����� � ��������� �^_� ����(��<�V3����. -���! ����� pC�<�cNL:��.`73������ ��:;3�+0��(��"30�.�!`�L -+0+%(.�7T ����30������#�&,�!� �a[� 3�� �*:. -���N��

��3X&V��3��Z30�.�!`�L -+0+B�. -���R3��;����:���� 3���� +0`����i� ���C�<�� �30���>�%b,����+V��+X&V�. �3%&,�!+0��� ���Z3���� ����� pC�<�NL:���`<3������ (.�7T ����30������+c��Nn3����"`<L -+0+

Rational�

SV�3��7���. �3���a[��~� #y30�.� `�L -+E+ (��<T.�.�~3������ �d >�= -��0�> -(;� `�����3� ����=3���� ���<�DpC�7�"NL:���`<3������ (.�7T �����3�������#[�� �3����<�j3��. -�!rs:�+E3 3����X(.�<`�L ��� M3������y�v$%�'&,�<a[�<� #���3j��+g�����*(6���� -`<30��`��X30� (��<T.�.�c3����%����� pC�<�NL:���`<3�������+ ��:;3�+0��(��B��Ny3����B`�L -+E+c(��<T.����3������n� ^_�.(����<( #;��Nn`<��> -�d�������j -��(d�C��+E3�`�����(���3������.+g+E�C��`���N��3����Xpi���. >a*�����2��N 3����%���<�DpC�7� NL:.��`<30������#[30�.�% -`<3�:. -�(��<T.����3������D��+2����3g������(���(d��� ����(��<�g30� �E:�� �(��<��+E3� -��( �630�.�!`�L -+0+�zC -�+0� # +0�<� ��� M3������ 3���� (��<T.����3�������N������ 3���� (���`�L M�� �3������Z -���'&V+c+0�<� ��� M3��`����6�.��L M3������d -+c(���+0`<���~pC��(Z���Z{*��`<3������ 8F�����@PF�

Page 154: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'I-? �_� ��� ����� �q � �+� �

4.1.4 Public and privateSV+n(���+0�������<��+n��N�30�.�2`�L �+0+ #'&,�j`> �� (���`���(�� &V����`��!����� pC�<�0+C`> -�!pC�2:�+0��( ��:;3�+E��(��2��N�3����j`<L -+0+�� S����� pC�<�C(���`<L ��� �30�����"��+ (0:+S)*d�J� ��N* -��("���.~�R��N*��3n M�.�i�> ���+n+0�����<&%�.�7���2 -N�3��<��

public:+E�C�<`���T.�<� #

-��( &%��3�����private:

+E�i��`���T.�<�c���pC�<3k&,�����y�j^ 3X��+ (0= �[pw,5�<� ��3����<�0&%��+0���2^_� � ��E3���`�:�L �� #F��Ny3����`�L �+0+X(��<T.����3������ `�����3� -����+,���

public:+E�C��`��~T �7� #. -�C����� pC�<��+, M��� �����~a� �30���

^_Nv �����Dpi�<�,NL:��.`73������Z���X(. �3� �����Dpi�<�,��+,�.�0��a� M3�� #���3c`> -� �������pC�! -`�`��<+0+0��( p*������ pC�<�NL:���`<3�������+ ��Ny3����B`�L -+E+ ��3�+0�<�N �� ����,� u� -�6�.�� #���NC&,�V���<�.L �`��V�������+g?[qD ��.( I�] ���Kv�������� -� �F�Vp��

std::cout << "Numerator = " << r.n_ << "\n"

<< "Denominator = " << r.d_ << "\n";

&,� ���<3B -� �<�0�����B���<+0+� -��� # +0����`��!30�.�!( M3� ����� pC�<�0+n_ -��(

d_ M��� ������a- �3��z ��N ����� pC�<�c��+

�.:;p ���` #*3����<�0� ���� ��� ���<+E30����`73�������+ 3�� ��30+c:�+0�-������ (.�&,� �����<(=������a- �3��D�����Dpi�<��+�� b,���<��� ���� 3k&,���d -��� ���� -+0����+ � ���=3���� �����D�. -��( #

������a- �3��d����� pC�<��+!��N�3����4`����E����+E�C����( 3�� NL:���`<3������ ����3k�=3��. �3 3����d`�L �+0+ �.�<��(�+ ����3��<���. -���=p.:;33��. �3"��+!����3 e_`�����+0��(��<���<( 3���pC�)gB������7a� -��3!3��Z :�+0�<� ��N 30�.� `�L -+E+��AR� 3���� ��3����<� �. -��(�#� -��(3�����+V��+%3���� `> -+0� ��� ��:;�R`�� -+0+

Rational#i�d �/*����� ����� pC�<��+c������a- �3�� ����+0:;���<+R30�.� `<���0����`<30�.�<+0+

��Nv3���� ����3��<���. -n���<������+0�<��3� �30�����y�B5 ���.+E��(��<�%3���� -~3��<���. �3��~a[�"��Nv�.:;p ���`!(. �3� D����� pC�<��+n_ ��.(

d_���3����"`�� -+0+

Rational�jb,�.�<� +0�����������R`���:��( &X����3��

Rational r(3,4);

r.d_ = 0;

S 3X30� M3c�i������3 #r��+c�.� ����[ -i�� �3������. -C��:.� pC�<�X -���F��������#F+0����`��"��3c� �+X(������������. �3����

0� �Z �/ �

����� 30�.� (������������. �3����V������a- �3�� -��( -���M&%����������� =>�',cB -`�`<��+0+!3��d_3��;����:����=3���� ���<�DpC�7�

NL:���`<3������d()

����+0:;����+%3��. �3X �3% -���30����� #F �� �30�����. -C�*:�� pC�<�c�. -+% ����� � �<��� (.�<�.������� M3����>�� �B M��� !$#0*dD -���'&,��( 3��!�d �/[�X(. �3� "����� pC�<��+v�.:;p.���`c��N 3����<���V ����%��� `<���.(���30������+j���63������~�

rs������3ja� ��:���+��j} ���*(6���������� -�������.�B+G3s�*��V��+23�� ,5*d1b,.Dq� (.�<`�L ����%( M3� "����� pC�<�0+g -+j�.�0��a� M3��V -��( -���M& `�����30�0������( -`�`<��+0+6e &V���<3����<� ��3 ������=���> -(�+ (. �3� Z�����Dpi�<� ��� ���*(���T.��+!��3'g"3��;����:�����.:;p ���`!����� pC�<�%NL:��.`73�������+��Rb,�.�<+0� �����Dpi�<�%NL:���`<3������.+B`� -� �<�.+E:��0� 3��. �3B���d� M��� ��+B`> �:.+E��(y� ;���%� u� -�6�.�� #�&%����30�����

Rational r(3,0);

&,���0y 3,&,���0/ #.(�:��R3�� 3����assert

����`��. -����+0� &,� �7u*� � -��� pi����'& �

4.1.5 ConstructorsS `�����+E30�0:.`73���� ��+ %+E�i��`��L -*�����Dpi�<� NL:���`<3������ &V�~3�� V+E�C��`<�L -F(���`�� ��� �3������ #�(��<T.�.�~3�������#� -��(D`> -�+E�*��3� Mui� S `�L -+E+ :�+0:. -��� �. -+ +0�<a[�<�� -i`�����+E30�0:.`73�����+ #*p.:;3, -��� 3k&,� `�����+E30�0:.`73�����+ �D:.+G3 (���hi�7� ���3���� �*:��Dpi�<�c���X3����R3k�*�C��+X��N 3������~�%NL�����d �i� M�� -���<3��7��+��bc���B�. -���V��Nn `�����+E3E��:�`<3����,`�������`���(.�<+g&V��30�63����B� ����V��NC3����B`�L -+0+ #; -��(d��3 �. -+ ��� ���<3�:;���

3k�*�C�-�gb,���"(���`�� ��� �3������

� � � ��� e � ��� � ��������� ��#n�~����# ����� � ��������� � g

Page 155: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �'I�I

(��<T.����+ a- ����L Mp �� � ��N,3k���C� � � � �� -��( ������3��� -�� � �<+B��3!p�� `> -������� 3����� M�.������������ �3��D`���� �+E30�0:.`73����>� ����X�7u; -�6�.�� #*3���� (���`�L ��� �3������+E3� �30��������3

Rational r(3,4);

(��<T.����+Z a� M���L �p.��r��N"3s���C�

Rational -��( ������3��L ��� � ��+ ��3� -`�`�����(������ 3�� 30�.� `�����+E30�0:.`73����

(��<T.����3������

Rational ::Rational (int n, int d)

: n_(n), d_(d)

{

assert(d_ != 0);

}

b,�.�d+E�i��`��L -g+E�F��3� Mu ���<���d��+ 30�.� �[#I����� ,5*P���q�>= pC�73s&,�<��� 30�.�dNL�����d �j� ��� -���73��<� ���+E3 -��( 3����pC��(��[�2b,���"������30�L -�� � �<� ��+,��N�3���� NL�����

� � � � �L�se ����� � ��������� � g�#y���~��# � �� � ��� e ����� � ��������� � g

&V���<�0� � �� � �L��#~�7�<� # � � � ���| ��0� (. �3� �����Dpi�<��+ #* -��( ��� � � ����� ��� ��#~���>� # ����� � ��������� � ����R�7u �������+0+E������+B��N 3k���C��+V&V����+0�"a� -�:.�<+B`> -� pC� `�����a[�<�03���( 3��63���� ����+G�C��`<3��~a[� ( M3� ����� pC�<�c3k�*�C��+<�b,�.�<+0� a� -�:.�<+R ���� :�+0��( 3��d������3��L ��� � �B3���� (. �3� ���<�DpC�7��+ #�pC��NL����� 3���� pC��(�����+V�7uF��`�:;3���(�#y -��(��� 30�.�%����(��<� ��� &V����`��63����%����� pC�<�0+j M���V(���`�L M����(6���630�.�X`�L -+E+��2^_����3����<�g&,����(�+ #[3����V����(��<�g���3����%���.�~3��L -�� � �<� ��+j������������(�#�p :;3g��3 ��+2���*��(6���� -`<3���`��c30� :�+0�%3����%(���`<L ��� �30����� ����(��<� �.�7���B -+2&,���_�^_Nv (. �3� ����� pC�<�,��N NL:���(. -������3� -i3k�*�C�"��+,�.��3X���+G3���(�����3����"���.�~3��L -�� � �<� #���3c��+X����3X������3��L ��� � ��(e p.:;3c`> -� +E3����ipC�" -+0+0��������( +0�����Ba� ��:��"��� 3����"`�����+E3E��:�`<3���� y +cpC��(;�dL �3��<� g7�bc���"`�����+E30��:�`<3����X`> -�Z -�+0� pC� `> -���<(��7u*� ���`���3�~�d -+c���

Rational r = Rational (3,4);

b,�.��+!������3��� -�� � �<+ r �.��3!(�������`<30��=N��0��� 3k&,�Z����3������<��+ #�p.:�3!N������ -� ��p.rs��`<3!��N 3s���C�Rational`�����+E30�0:.`73���(�p�� 3���� �7uF�.���`���3,`�����+E30�0:.`73����%`� -�

Rational(3,4)�

4.1.6 Assertionsb,�.� (��<T.����3������d��N -���������[ - �� �3������. - �*:��Dpi�<�,&V��3��d(������������. �3����

0`� -���.��3,pC� �a[����(���( ���Z

+E�*��3� -`73���`> -y��7a[�� �j30�.� (���`�L M�� �3������Rational r(3,0)

&V���C`����6�.������ �g:;3%&,� `> -� �d M/[�"+0:;���3��. �3 3�����+ p.�:���(��<�c��+ (��<3���`<30��(�&V�����3����"(���`<L ��� �30�����d+E3� �3��<������3,��+ �'& ���>:4�<�hB �gS)+0���6� ��%&c ��3�� (.�D3�����+,:�+0��+ ,5�����>=)���J!$#0� �jSV�� -+0+0�7�03������Z�. -+,3���� NL�����

��� � � e ��� � � ��������� g

&V���<�0� ����� � ��������� ��+R ������(���`> M3�� #C -� �7u*�.�0��+0+0����� ��N2 3k�*�C� &%�.��+E�!a� ��:���+B`> -� pC� `�����a[�<�03���(3��

bool� c��`������d 6��+" -���M&,��( ��� � ��� � ��������� # d`�����+0� �*:�����`�� ��Ng3���� N �`<3!3��. �3

assert��+

����3c NL:.��`<30�����p.:;3X 8�, �>=�! �jS)�d -`<�0� ��+c !� ����`��R��N ���73� � `<�*(��V3��. �3 3����R`����6�.����<�j���<�.L -`<��+&V�~3��Z -`73�:. -n5XW W `��*(�� �.�0�����,3�� `����6�.��� �3������y�

Page 156: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'I�P �_� ��� ����� �q � �+� �

bc��� ���[ -C��N ��Z -+0+E�<�03��������+ 3��D`��.�<`�/3��. �3X `��<�03� -��� �����<(.��`> �3��B�����(�+c �3X `��<�03� ���� �C������3>�b,�.� ������`<��+0�D+0���d -��3���`�+B��Ng -� -+E+0�<�03������ ��+ -+RNL�����M&%+�� b,��� ��� � � ����� ��� ��+R�<a- -�:. �3��<( #y ��.( ��N��3 ���<30:��0�.+ � � � � #g�7uF��`�:;3������z��NX3����d�.�0������ -� 3��<������� M3���+ ��������(��L M3����� &%��3��4 ��z�<�0�0���6����+��+� -��� 3��������.� :�+63��. �3 30�.�����+E�i��`<3���a[� �+0+0�<�030�����4&c -+ a*����L �3��<(n�w^_N � ��� � ��������� ���<3�:;����+ � � � #�7uF��`�:;3������ `�����30���*:���+ �������d -�~�[� ^_� ��:;�D`> -+0��#23�����+ ���� -��+ 3��. �3 3����d(.�<`�L ��� M3������ +E3� M3���������3Rational r(3,0);

��> -(�+X30�� = :N#0���/82�6�>= =>!$= &V����� �7uF��`�:;3���(y�Xbc����+X��������3c����3%pC� Da[�<�0��C����~3��D&c �� ��N 3��<��������:�+!30� M3 �(������������. �3���� ��N

0��+ ����3 -���M&,�<( #np.:�3!&,�6+0:;������ ���<3 3����

�C������3>�x2��: `> ��4 �����:��63��. �3 �~3 ��+ `���+E3�~� 3�� 3���+E3 3����d -+E+0�<�03������ ��� �<a[�<�E� `<���.+G30��:�`<3���� `> �� #irs:�+E3

3�� `> �3�`�� dNL�<& �Gp -( � `> ���+�� $%�'&,�<a[�<� #���3 ��+B�C��+0+E��p.�� 3�� 3��<� 3���� `<���6� ����<�B&V����� �[��: +E3� M�03��3R3������������� 3����

assert�d -`<��� #C���� -�������63��. �3" -� ���6��3k� �.����`��D��N 5XW W `���(.� ���<�.L �`���+ ��3>�

b,�.�d:�+0:. - &c �� 3�� ��� ��+ 30�.�7����NL����� -+DNL�����'&V+ � (.:;�����.� `���(.�d(��<a[������ ���<��3 #v�.:;3D -+0+0�<�E3�������+�<a[�<�E�*&V���<�0� �[��: &c -��3"3��pC�D+0:;��� 3��. �3"+0�����<30�.���.������ -��� �����(�+�� ������� 3���� `<�*(�� ��+ +E3� Mp ��e -��( �.� -+0+E�<�03������ aF����� �3�������+!+E����� 3�� ��`�`�:;� -���*�������)g�#v3���� 3����`<���6� ����<� 3�� �������'a[��3���� -+0+E�<�03�������+�� b,�.���d �` �������DL -����:. -���D`��*(��6��+"3������ -+ � � `�������3D -+ ��N �[��: &,��:��( ���<a[�<� �. �a[�&%�0��303����3����! �+0+0�<�030������+X���3���� T���+G3X�.L -`<���b�� :�+0� 3����

assert�d -`<��� #�&,�"�. �a[�"3�� ����`��:�(��B3����"���> -(��<�

cassert�

4.1.7 Default constructorb,�.� ���*��(=3��������Z �pi��:�3"`�L �+0+0��+ ��+ 3��. �3 3����<���6 ���� ���Z:���������3��� -�� � �<( a- ����� �p.���+ ��N `�L -+E+"3k�*�C�-�������� `�����`<���<30���� #���3c��+,���6�C��+0+E��p.��%3�� >a[����(Z `�����+E30��:�`<3����X`> -�C����(��<T.������� a- ����L �p.��-� 1 a[�����Nn&,� &X����3��

Rational r;

3����da� -�:.�d��Nr&V���gpC�d(��<T.����(4+0����`���3���� B ��KL,.:4*T� ��!$#0����= : � �<!$= ��+ `> -���<(z��� 3�����+ `> -+0�d3��

������3��� -�� � �r�c^_N������<+0����3 # 3���� (���N -:��3%`�����+E30��:�`<30���V��+c3����!:���� �*:��!`<���.+G30��:�`<3����X&V��3��Z -� ���6��3k�

NL�����d - � M�� -���<3��7�R���+E3>�"^_� `> �+0� ��Nj3���� `�L -+E+Rational

#C3���� (.�<N -:��3R`�����+E30��:�`<30���!������30�L -�� � ��+3���� �.�7&xa- ����� �p.��B&V��3��da- -�:��

0�

bc��� (���N �:.~3V`�����+E30�0:.`73����B��+% -�+0�6`� -����(�NL���R `�L �+0+X3k�*�i� (. �3� ���<�DpC�7�X����3B���+E3���(����Z3����������3��� -�� � �7� ��N +0�����R`�����+E3E��:�`<3����>�� � �d ��4(������pi�<�� �3��<��4`����*��+0� 3�� (��<T.���= (���N -:��3`�����+E3E��:�`<3����d3��. �3d(��*��+d����3������3��L ���

� � ��+E�����6(. �3� ������ pC�<�0+ # p.:;3 &,��`> -������3 +0���6�.�� NL�������<3 30�.�����.�~3��L -�� � �3������y�6S%�.( ��N &,��(������3B�����Ma*��(�� 6(���N -:��3R`�����+E30�0:.`73���� #i3���� `����6�.����<�c&,���0y 3 -`<`��<��3R3���� (.�<`�L ��� M3������ +E3� M3���������3Rational r;

b,���g������"�7u;`��7�.30����� ��+v c`�L -+0+ &V��3�����:;3 -���!`�����+E30��:�`<30���v �3 -��z-NL���v+0:�`�� X`�L -+0+ #3���� (���N -:��3B`<���.+G30��:�`<3����B��+B���6�.���`���30�� �����'aF��(���(]e 3��d ����'& `<L -+0+V3k�*�i� ��p rs��`<30+V3��6pC� `<���� �3���( �3X -�-g7� bc����+,���6�.���`���3 (���N �:.~3X`<���.+G30��:�`<3����c������3��� -�� � �<+ `�L -+E+,3k���C�"(. �3� ���<�DpC�7��+ :�+0����� �V�;���/=(���N -:��3c`�����+E30�0:.`73�����+ #;p.:;3%��3c(��*�<+%����3c������3��L -�� � �V(. �3� ����� pC�<�0+ ��N NL:��.(. -���<��3� - 3s���C���

4.1.8 User-defined conversions5 ���.+G30��:�`<3�����+v&%��3�� �����,� ��� -���<3��<�v�.L �� B+E�i��`��L -F�0���� � 30�.�7�D ���� :;����=)H'B � { # �'B?��!$#Ipw�>=)���J!$#0� �^_��30�.� `�L �+0+

Rational#F3����!`<���.+G30��:�`<3����

Page 157: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �'I�o

Rational (int n);

// POST: *this is initialized with value n��+ ":.+E�<� � (��<T.����(`�����a[�7��+0�����dN������

int3��

Rational� �%��(��<� 3�����+j`�����+E30��:�`<3���� #

intpi��`�������+

�G3k�*�C�"&V����+0� a- -�:���+B`> -� pC� `�����a[�<�03��<( 3��Rational

�Re �[��: /F���'& 3��. �3V�.�;�� -+0� g7�Bb,�.��+BNL����7u; -�6�.�� ���� -��+D3��. �3 &,�Z`> -�4�����'aF��(.�� =`> -�c� ��� ����<3��<� ��NV3k�*�C�

int&%�.�<�.�7a[�<�d NL���0�d -

NL:���`<3������ � ��� -���<30�<�R��N23k���C�Rational

��+R�7u*�C��`<3��<(+zn��� 3���� ���6�.���`���3c`�����a[�<��+0����� 3��. �3R3� �/[�<+�.L -`���#�3����X`�����a[�<�E3������ `�����+E30�0:.`73���� ��+j`> -����(y������3��6:�+0�<��� (��<T.����(d`�����a[�<�0+0������+ #�&,�X(����+y 3 �. �a[�3�� ������ ���?e +0�����<3������<+ ����`����6�.��<3�� g `�����a[�7��+0����� �0:.���+j+G3����.:�L �3���( p�� 3����%5XW W +E3� -��(. ���(�#�p.:;3&,� �d �/[�B3���� ��:���<+X��:;��+0�<�a[��+��

4.1.9 Operators and overloadingmy�<3 y@+ �0������� pC�<� ��:;�D������3��L �2&%��+0� � ���+E3 ��N,�� �3������ �g�*:�� pC�<� NL:���`<3������ ����3k�[� {*� N M� #2&,�d�. �a[����6�.������<��3���(�3���� ������3��L ��� � �30������+ -��(�3����" -`�`��<+0+%3��6��:����<�� �3����c ��.( (������������. �30���>� X�7u*3%���3���� ���+E3X ����R3����" �����3������<30��`V���C�<�� �3�������+ �2 -(�(���3�������#�+0:;p.3E�� -`<3������ #*� :��3��~� ���`> �3������ #�(���a*��+0�����y�^_(��> -��� #�3�����+X+0����:.�( ��*��/ ���/[�!NL���B30�.�!NL:.��(. -������3� - �����30�.���73���`B3k�*�C��+�z &,�!&,��:��( ���/[� 3��

&%�0��3��RNL���%� u� -�6�.��

Rational r(3,4);

Rational s(1,2);

Rational t = r * s; // 3/8�% M3������. - ��:��DpC�7��+ &,��:��(30�.�<�pC� -+,�> �+E� -��(Z -+,����3�:���3���a[�c3��D:.+E�" �+,30�.�$�Gp.:����3 �_��� � NL:���( �������3� -y ����~3������<3���`%3k���C��+��bc����+ `> ��z����(�����( pC� -`������<a[��(��d Z/[�<� NL�> �3�:;���d��N 5cW W ��+ 3��. �3 ����+E3 ��Nc3�������i�<�� �3����0+

���+G3���(���Zb Mp �� oD`> -�pC� !$p��>=)* !�,cB �hB 3��D&,���E/dNL���V -���d`�L -+E+c3k�*�i���gb,����+,���> -��+ 3��. �3,&,�R`> -�:�+0�"30�.� +� -���R���C�7�� �3����,3���/[��� 3�� ���6�.��<������3ja� ��0����:�+X���C�7�� �3�����+ � &,� �E�Ma[�7����[ -( � 3���� 3���/[�<�n�^_���������.`<���.�� #g3�����+ ��+6����3�������� ���<& � &,� -��0�> -(;� /*���M& 30� M363�����p.���. ��0�z���C�<�� �30���

*��+

�a� ���L �p.��"NL���"+E�<a[�<�� - 3k���C��+ #yNL���R�7u; -�6�.��int

��.(double

�"bc��� ���<& 30�.���.����+V3��. �3B&,� `> -� -(�(w�<a[�������������'a[�<����[ -(�+6���w��:��6�M&%�n� ^_�w(�������� +0� # &,� `> -������36`��. -�����Z3����Z���C�<�� �3���� y + ����~3s� # �.�0��`���(�����`��D���" -+0+0��`��L �3��~aF��3k� #�p :;3B&,� `> -� `<���� �3�� a[�<��+0�����.+R��N2��3B&V�~3�� (.�~hi�<���<��3RNL�����d -� ��� -���73��<� 3k�*�C�<+ # ��.(&V��30��(���hi�7������3c���<30:��0��3k�*�C��+<�

Operators as members.b�� (���`�� ����Z ��.( (��<T.��� -�w�'a[�<����[ �(.�<( ���C�<�� �30��� # &,�Z�. �a[��3�� :�+0�

3���� Kh:4# � ���"!$#�,5*9!>(I��=�,5�<!$= # !.�J,5���J!$# � SV(�(.���.� 3����ZNL�����'&V���.� (���`�L M�� �3������4 -��(��d M3�`��.���.�(��<T.����3�������3��4��:;������������ ��

rational.C�d �/[��+d3����=���C�7�� �3����

*= �a� -��L �p.�� NL���Z3����=`<L -+0+

Rationale_� �3��<�,&,�R&V���i�0��(�:.`<�

*30�

*=g7�

class Rational {

...

Rational operator *=( Rational r);

// POST: * this has been multiplied by r, and

// the return value is the new value

...

};

Page 158: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'I�# �_� ��� ����� �q � �+� �

...

Rational Rational :: operator *= ( Rational s)

{

n_ *= s.n_; // multiply *this by s

d_ *= s.d_;

return *this; // and return it

}

...

^_��3����main

NL:���`<3�������#F&,� `> -�Z���'&)&%����30�

Rational r(3,4);

Rational s(1,2);

r *= s; // operator notation

��������!3���� ����� pC�<�%NL:.��`<30�����operator*=

`�����a[�<�.������3�~� -���'&V+X`> -��+B��� ���C�<�� M3����B����3� �3������ #��3c`> -�Z -�+0�DpC�":�+0�<(Z���Z����(����. ��E�dNL:.��`<30�����. -C����3� �3������y� b,���"�7u*������+0+0�����

r.operator *=(s)

�. -+ 3����6+� ���� a� ��:��� -��( �<hi��`73D -+r *= s

� {*����`��63����6`�� -+0+Rational

�. -+ �:�+0�<��� (��<T.����(`�����a[�<��+0������N������

int#;&,�"`� -�Z���M&x�<a[�<�Z&%����30�

Rational r(3,4);

r *= 2; // 6/4

b,�.��+X���6�.���`���3���D`�����a[�<�03�+c3����int

a- -�:��23��

RationalpC�<NL�����!`> �������� 3���� ���C�<�� �30���

*=�

Operators as nonmembers.�=� `� -� ���'& ���6�.������<��3 3���� � :��30���.���`> �30����� ���C�<�� �30���

* -+d

����� pC�<�!NL:.��`<30�����operator*

-����.�Z30�.��+0 -���6�������+<� bc����+ -���'&V+":.+ 3��Z&X����3��r * s

-��(r * 2

��� ���C�7�� �3����%�.��3� �3������y���g:;3V3���� +0��30: M3������Z��+%�.��3V+E�F�����<3E����` #;+0���.`<�!&,� �h,.#I# !.� &%�0��3��2 * r

� b,��� ���> �+0��� ��+"3��. �3 30�.� ���N�3 ���C�7�� -��( ��+!3����6�����6NL��� &%�.��` � 3����6���<�DpC�7�!NL:���`<3������operator*

��+V`> �����(�#.+0�63��. �3V���i�<�� -��( � :�+E3XpC� -� � uF������+0+E����� ��N 3k���C�Rational

�V^_�6�.���`<��3`�����a[�<��+0����� (��*��+2����3 �.�<�� ����32��+v������D ����.����<( 30� �0 -(. ���3��R`> ��*� ��� -���73��<��+ 3�� NL�����d -�� M�� -�����3��<�0+j��N `<���.`7���<3��cNL:��.`73�������#�p.:�32��3 `� -���.��3 pC�c ����.����<(D3��RT.��( `> -��(���(. �3��<+vNL��� -� ��������������L �3��NL:���`<3������ ����3����RT.�0+E3X�.L �`����bc���<�0�g��+ c&c �� ��NF��+E3� �p.���+0�������,+E�F�����730�0�B3��. �3 -���M&%+n:�+n3��X&X����3��vpC��3��

r * 2 -��(

2 * r�

;���V3�����+ #.&,� (��<T.��� �����p -operator*

&%��3�� ��1b! �����:�������30+ #. -+BNL�����'&V+ e_���rational.C

#&,�R&,��:.�(�����+0�<�E3%��3c(������<`<3����pC�<NL�����

maing7�

Rational operator * ( Rational r, Rational s)

{

Rational t = r;

return t *= s;

}

^_��3����main

NL:.��`<30������#�&,�V`� -�63������6&%�0��3��X30�.�X`��*(��XN��� -��������3gN������|3����XpC�������.������� ��Ni3�����++0��`73������y� SV�[ -����#F3����<��� ��+X -� -~3��<���. �3��~a[�BNL:.��`<30�����. -C����3� �3������y�

Page 159: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �'I�q

Rational r(3,4);

Rational s(1,2);

Rational t = r * s; // in functional notation : operator *=(r, s)

Comparisons.bc���`����6� �����+E��� ���C�7�� �3�����+ NL��� 3���� `�� -+0+

Rational ����pC��+E3 ���6�.���������3���(

-+"�.��������� pC�<�0+" �+"&,��� # ���=����(��<�!3��Z -���'& pC��3��=30�.� �.�0��(���`> �3��<+r == 4

,.#�B4 == r

#�NL����7u; -�6�.���� ;���X30�.� � ��: ����3k�d���C�<�� M3���� #F3�����+,&,���0/F+X -+cNL�����'&V+��

bool operator ==( Rational r, Rational s)

{

return r.n() * s.d() == r.d() * s.n();

}

4.1.10 Overloading resolution{*:;���C��+0��&,�� �(.( -����3����<�

operator*=3�� ��:;� `<L -+0+

Rational3��. �3D� :��3��~� �����+" �� �3������. -

�*:�� pC�<� &%��3�� -� ����3������<�>� SVN�30�<�D -� # 3�����+ ������=3� M/[��+ ������D:��3����.���`> �3������ -��( ��+ 3����<�0��NL������������R� � `�������3X3��. -��`> -�����.� 30�.� �����<aF����:.+

operator*= -N�3��7�B -� ���6�.���`��~3 `�����a[�<��+0�����y�

Rational Rational :: operator *= ( int i)

{

n_ *= i; // multiply *this by i

return *this; // and return it

}

bc����+ ��+����[ - #Vp.:;33����<��� ��+�����=��+E+0:�� �z&V����� &,� &%���~3��r *= 2

#V3����<�0� ���� �.�'& ��1b!���C�<�� �3�����+ 3��. �3 `���:��( ���d�������.`<���.��%pC�B:�+0��(y�j^_�30�.��+ `> -+0��#F&,� ��:���+E+,30� M3 3����R���.� rs:�+E3c -(�(���(��+j` ����+0�<� +0���.`<�V��3�+jNL�����d -�� M�� -���<3��7�j3k�*�i��+gpC�<3E3��<� �d �30` � 3����%3k�*�C��+g��Ny30�.�X`> -�.� ��� -���<30�<��+>z3�����+,��:���+0+X��+X���.(����<(Z`����0���<`<3>�bc�����Gpi��+E3 �d M3�`�� �c��:��� M�.�.�����+ ��� �������<�� - #- -��( 3�����+n+0��`<3������ (.��+0`�:�+0+0��+ &%�. �3 ,pC��+E3 �d �3�`��

��+����g��NL�����%(��������B+0� #[&,� &c -��3v30�"�d �/[� `<��> �� 3��. �3 �'a[�<����[ �(.���.�R��+ ����3v����+G30����`<30��( 3�� ���C�<�� �3�����+��� �c`> -� �Ma[�7����[ -( NL:.��`<30������+=��� �������<�� - #[ ��.(D3�����+ +0���6�.��"���> -��+v3��. �3v3����c+� -��� �. -��� ��+ :�+0��(NL���R(���hi�7������3VNL:.��`<30������+��Vb��d M�.�.��3���� NL�����M&%����� 3��63���� +G�C��`��L ��`> -+E� ��N2���i�<�� �3����0+ # &,� �. �a[�3��D3������;/d��� 3��7����+,��N�3��������cNL:���`<3������. -y����3� �3������n�

Lookup: Finding the candidates.b��D�.�0�*`���+E+V -� :.� ��: ����T.��(NL:.��`<30�����Z`> -�C��N�3����"NL���0�

� �� � � e � ��� � ��������� ��#n�~����# ����� � ��������� � g3����R`����6�.����<�g�. -+ 3��DT.��( �d M3�`��.���.�!NL:.��`<30����� (���`<L ��� �30�����y�25c -��(���(. �3��<+ ���� -�CNL:���`<3������.+

f��N �. -��� � �� � �X+0:�`�� 3��. �3 3����cNL:��.`73������ `� -�;��+ ���D3����c+E`����C�c��Nf� ^_�� -(�(���3�������#-3����,�*:�� pC�<�2��N

NL�����d -y� ��� -���73��<��+V�D:�+E3V�d M3�`��Z3���� �*:��Dpi�<�V��N `> -� � ��� -���73��<��+ # -��( �> -`�� `� -� � ��� -���<3��<��D:.+G3gpC�B��Nn "3k�*�i�V&V����+0�Va- -�:���+ `> ��pC�%`�����a[�<�E3���( 30� 3����B`����0����+G�C����(.���.�!NL�����d - � ��� -���<3��<�3k�*�C�<+��^_� �����Dpi�<�,NL:��.`73�������`� -�

Page 160: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P�] �_� ��� ����� �q � �+� �

��� � � ��������� � � � � � e ��� � � ��������� ��#y���~��# ��� � � ����� ��� �Og3����B`> -��(���(. �3��<+, ����B�����/[��( :;�� -�������!3����B����� pC�<�gNL:.��`<30������+ ��Nn3����B`�� -+0+ `����0�0��+E�C����(������ 3����� � � ��������� � y +c3k���C���^_� ��*:. -���T.��(NL:���`<3������Z`� -�C��N�3���� NL�����

� ��� � �� � � e ����� � ��������� ��#y������# ����� � ��������� �Og&V���<�0� � ��+X D�. -����+G� �`�� #F������d3�����+,�. -����+E� -`<� ��+X+0�� ���`�����( NL���V`> ��.(���(. �30��+��

Argument-dependent name lookup.b,�.�7��� ��+ �����+E�C��`��� - ��:����3��. �3D+0�����<3�������+ �d �/[��+ 3����

���+G3"��Ng`> -��(���(. �3���+ L ������7�>�6^_N +E�����D`� -� � M�� -���<3��7� 3k���C� ��N -� :�� ��:. -���T.��( NL:��.`73������ `> �� ��+(��<T.����( ��� �. -����+E� -`��"���B`�L �+0+ � e_NL���B� u� -�6�.��R3���� �. -����+E� -`��

stdg�# 3������ 3���� `����6�.����7�

-�+E� +0�� ���`�����+VNL���X`> -��(���(. �3���+,��� � �

Resolution: Finding the best match. ;���n�> -`�� `� -��(.��( M3��vNL:��.`73������ ��.("�> -`�� `> ���� ��� -���<30�<� #'��3

��+ `�����`�/[��(d�.�'& &,���F30�.�c`> -�F� M�� -���<3��7�v3s���C�,�d �3�`�����+v3����X`<���0����+E�i���.(������RNL�����d -F� ��� -���<3��<�3k�*�C�-�dbc���<���6 ���� NL��:;� ��:. -���3k� ��<a[�<�+ # ��������� N������ pC�7303��<�"3���&,����+0��#�����a[��� ��� 3���� NL�����'&V���.����+G3>�

e0�)g ���������������� ��jb,�.�B3k�*�i��+X��Ny3����R`> -�i� ��� -���<3��<� -��( 3����RNL�����d - � ��� -���<3��<� ����B3����+� ������

e �$g��������������������������� �� b,���<���d��+ �����������3������=N������ 3�����`> -�g� ��� -���<3��<�!3s���C��3�� 3����NL�����d �V� M�� -���<3��7��3s���C����� � �. >a[� +0����� ����������30������+6N������

bool30�

int -��( N��0���

float3��

double�

e_8.g���������������� �����"!$#%��&'�����(���)���� �*|b,���<��� ��+d +E3� ��.(. ��0( `�����a[�<��+0����� N������ 3���� `> -�� ��� ����<3��<�c3k�*�C� 3��63����!NL�����d �n� ��� ����<3��<�,3k�*�C�-�c�=� �. >a[�!+0����� 3��. �3V -�yNL:��.(. -���<��3� - ��0��3������<3���`X3s���C��+c`> -��pi�!`�����a[�<�03���( ����3��D�> -`��Z��3����<�cp*� +E3� ��.(. ��0(�`�����a[�<��+0������+��

e ?5g�+,&-#%�"./��#%0��1��#%�2�����"!$#%��&'�����2�������� �*!b,�.�7��� ��+B :�+0�7� � (��<T.����(=`<����a[�<��+E����� N��0��� 3����`> ��C� M�� -���<3��7�c3k���C�"3��D3����!NL�����d �i� M�� -���<3��7�c3k���C� #.���/[�R3����"`�����a[�<��+0����� N������

int3��

Rational30� M3X&,� �. >a[� ����30���*(�:�`���(y�

S NL:���`<3������f��+,`> -����( S�� �V�<�>= 3��. -�

g&V��3������+E�i��`<3c3��6 � ��� -���73��<� #F��N 3���� �d �3�`��30� M3

f����(�:�`���+V��� 3��. �3V� ��� -���<3��<�%��+B �3V��> -+E3B -+V���*��( -+V3���� �d �30` � ���.(�:�`���( p��g�%^_Nv3���� �d �3�`��

��+,���> -����pC�<3030�<� #f��+c`> -����( �>��= �"� �V*dD S�� �V�<�>= NL���X30�.�R� ��� -���73��<�>�

S�NL:.��`<30�����f��+B`> -����(= S�� �>�k8�,5�<� � ��N ��3R��+BpC�<3E3��<�B3��. -� -��� ��30�.�7�"`� -��(.��( M3��

g��� -�

� ��� -���73��<��+ #F -��(Z+E30����`<3����pC�7303��<�c3��. -�g��� �3c��> -+G3%�����R� M�� -���<3��7�>�

�%��(��<� 3�����+ (��<T.����3�������#[3����<���R��+ M3,����+E3 �����VpC��+E3,�d M3�`�� #[p.:;3,��3 �d ��6�. ����C���d3��. �3 30�.�7�����+X�.�DpC��+E3%�d �3�`���#�����&V����`��Z`� -+0�"30�.�"NL:��.`73������Z`> �� ��+ ,.8GS �[@$:u!$:;� #. -��(�30�.�"`����6�.����<�c��+E+0:���+ -�Z�7�0�����X����+0+� -���-�$%�<���"��+c -�Z�7u; -�6�.����25 ����+0��(��<�c3���� 3k&,� �'a[�<����[ -(���(ZNL:���`<3������ (.�<`�L ��� M3�������+

void foo(double d);

void foo(unsigned int u);

Page 161: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �>P;�

^_��3���� `��*(��!N��� -��������3

float f = 1.0f;

foo(f);

3����gT���+E3 �'a[�<����[ -( ��+ `�����+0����#�+0����`��float

`� -� pC� ����������3���(!30�double

#�p :;3v��+ ������ +E3� -��( M��( �`�����a[�<�03���(Z30�

unsigned int�j^_�

int i = 1;

foo(i);

3���� `> ��*��+ -�Dp.����:���:�+ #M+0����`��int

��+ +G3� -��(. ���( � `�����a[�<�03��<(D3��Vpi��3��double

-��(unsigned int

4.1.11 Call-by-value and call-by-reference X�7u*32���6��:;�j���+E3 ��N �� �3������. -FNL:���`<3������ NL:���`<3������. -���3k� ��+ ��:;30�.:;3 #� -��( N������ &V�. �3 &,�,�. �a[�X(������ �pC�'a[� #[�[��: ��������3 ��:���+0+ 3��. �3 &,�% ��0�c�.L -���������V3�� �Ma[�7����[ -(D3����X��:;30�.:;32���C�<�� �30���

<<NL���j3��. �3��

^_�ZNL:���`<3������. -C����3� M3�������#*3�����+,��+c`> -����(operator<<

�bc���<�0� ��+V����� ������p.���� #�3�����:.���y�VAR� 3���� ����� �. -��( #.&,� �. >a[� +0 -��( ��� {*��`<30�����=8F�����98 30� M3

NL��� -�y3k�*�C�<+V&,� /F���M&Y+0�dN �� # 30�.�!`> -�n� M�� -���<3��7��+V -��( 3���� ���<30:��0� a- -�:�� ��N2 NL:���`<3������ M����0a- -�:���+��gAB� 3����R��3����<�c�. -��( #;��� (���+0`<:.+E+0����� 3���� ��:;30�.:;3,���C�<�� �3����c����{*��`<3������ �*������� �"&,�"�. �a[� �����:���( 3��. �3X3���� ��:;30�.:;3V+E30�0�> -� � -+E+0��( 3��� -��( ���<3�:;������( p���3���� ��:;30�.:;3V���C�7�� �3����%� :�+E3XpC� -� �a� ��:�� #�+0����`��,3����,��:�3E� :;32���*(���T.��+n3����X+G30���> -� � $%�M&4(.��+ 3�����+ T�3 3������<3����<����bc���X ���� �������3`�����30�� -(���`<30����� ��+c���<+0���a[��(�p��Z ���<&)N -����~����N 3k�*�i��+��

Reference types.^_N�� ��+c -���3k�*�C��#�30�.�<�

���

��+%30�.� `<���0����+E�i���.(������ =>�/K��>=>��# ���Y��D (I� � ^_� a� -�:.�"�� -����� -��( NL:.��`<30�����. -���3k� #����O��+V��(�����3���`> -3�� � �.b,�.� (���hi�7������`�� ��+X����3����"���.�~3��L -�� � �3������ -��( -+0+E������������3,+0�<�d -��3���`�+��Sx�0��NL�<������`��"3s���C�Ra� ��0�L �p.��fe -�+E� `> �����(� =>�/K��>=>��# ��� g%`� -��pC� ������3��L ��� � ��(d ��.(Z -+0+0��������(3��

������ N������ ��z�a- -�:��z2����+E3��> �( ��N,pC������� Z`������ ��NX3�����+ ~a� -�:.�Re ���/[�63����6a- ����L �p.��<+ 3��. �3 &,�/F���'&)+0� N M�'g�#���3 pC��`<������+c -� ,5*d�",5� ��Nn3����"�a- -�:�� � ��.��30�.�7�X�. -���RNL���c3����R��p rs��`<3,pC�<�.���.(3�����a- -�:������=�V -�+0�!+� ��D3��. �323����Xa- ����L �p.�� =>�/K��>=)� 3��"30� M3g��p.rs��`<3>� b,���%NL�����'&V���.�R�7u; -�6�.��,+0���M&%+3�����+��

int i = 5;

int& j = i; // declare an alias for i

j = 6;

std::cout << i << "\n"; // outputs 6

^_��3��7���. -��� #- -� ��p rs��`<3 ��NF3k���C� ���U+0���6�.�� +E3������<+ 3���� -(�(;����+0+v��N. -�D��p rs��`73v��N;3s���C� �g��b,�.��+�7u*� � -����+ &%��� &,� ������( -� �a- -�:�� 3�� ������3��L ��� � � ����NL�<���<�.`<�63s���C� a- ����L Mp �� # -��( &%��� 3���������+���/[�

Page 162: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P � �_� ��� ����� �q � �+� �

int& j; // error: j must be an alias of something

int& k = 5; // error: the literal 5 has no address

(����0y 3,&,���0/i�2SV��� � uF������+0+E�����Z��N����<NL�<������`��!3k���C�"��+% -���a� ��:�� �~3�+0���N �S ���<NL�<������`�� `> -������3cpC� `��. -������(Z3�� ���<NL�<�B3��� -����3����<�%��p rs��`73B -N�3��7�V������3��� -�� � M3������y�2AB30�.�7� �

&V��+0� #M��3y&,��:.�("pC� �C��+0+0�~p �� 30�X`<�0�> �3��g -��L -+E��+CNL����3��<�6�C���� ��0�%a� ��0�L �p.���+���5 ���.+E��(��<� 30�.�2NL�����'&V���.�`���(.� N��� -�����<��3>�

int i = 5;

int& j = i;

{

int k = 6;

j = k; // assigns to the object referred to by j

}

std::cout << j << "\n"; // ok; outputs 6

std::cout << i << "\n"; // outputs 6 as well

�%�����/[� 3�����������3��L -�� � �3������ #y �� �+0+0������������3 j = k(��*��+ ����3 �. �a[��3�����+0���d -��3���`�+"��NX�d �/*�����

3���� ���<NL�<������`���3k�*�C�6a- ����� �p.��j -� -��L -+!NL���

k��bc�. �3 &,��:��( pi�6(. -�����<����:�+ # +0���.`<�63����� -��L �+

pC��`<������+ ����a- -���(z -N�3��<� 3���� +E30���� -����(�:;�� �30�����z��Nk� �+ �7u*�.������(y� ^_��+E3��� -(�#j3����Z �+0+0������������3

���C�<�� �3����B �+0+0������+%3�� 3���� !�S � �h� � ����NL�<�0�0��( 30�6p*� j�%^_� ��:��V`> -+0� #.3�����+B -�+0�6`��. -������+%3����!a- -�:��

��Ni#�+0����`��

j��+X -� ���L -+ NL���

i�

Reference types and functions.�������d "NL:���`<3������6�. -+ NL�����d -;� ��� -���<30�<�2��N ����NL�<�0����`��V3k�*�C� #

3�����`����0�0��+E�C����(������Z`> -�g� ��� -���<30�<� �D:�+E3!pC�d �� ~a� -�:.��zj��� 30�.���7a� -�: M3������ ��N 3�����NL:��.`73������`> -� # 3���� ������30�L -�� � �3��������N230�.� NL���0�d - � ��� ����<3��<�%�d �/[��+B��3R ��= -��L -+VNL���B3���� `> ���� ��� -���73��<�>�^_�d3�����+g&c �� #*&,�B`> -����6�.������<��32NL:��.`73�������+ 3��. �3 `��. -�����V3����Va� ��:���+,��Ny30�.�<��� `> -� � ��� -���<30�<��+��$%�<�0�"��+X -�Z� u� -�6�.����

void increment (int& i)

{

++i;

}

int main ()

{

int i = 5;

increment (i);

std::cout << i << "\n"; // outputs 6

return 0;

}

^_N zNL�����d -B� ��� ����<3��<� �. -+ ���<NL�<������`�� 3k�*�C��#R&,�=+� �� 3��. �3&,� �. �a[� �h,5*[*TH S DwH =>��KL�>=>�># �h�+0���d ���3���`<+�� ^_N 30�.� NL�����d -X� M�� -���<3��7����+ �.��� � ����NL�<���<�.`<� 3k�*�C��#%&,� � �a[� �h,5*[*TH S DwH pw,5*d: �+0���d ���3���`<+�� ^_��3����VT���+E3 `� -+0� #F3����B �(.(;���<+0+ ��N_e_���, !����NL�7������`��B3��5g23����B`> �� � ��� ����<3��<�j��+ :�+0��(

Page 163: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �>P�8

3��Z���.�~3��L -�� � �!3���� NL���0�d -v� M�� -���<3��7� z�:���(��<� `> ����_p�� � a� -�:.�D+0���d ���3���`<+ #y��3!��+"3���� a- -�:�� ��Ng3����`> -�y� ��� -���<3��<� 30� M3X��+X:�+0��( NL���X������3��� -�� � M3������y�bc���g�0�<3�:;��� 3k�*�C�g��N; XNL:���`<3������ `� -� pC� ,����NL�<���<�.`<� 3s���C� �+�&,���_� ^_� 3�����+ `> -+0� #�3���� NL:��.`73������

`> -� �7u*������+0+0����� ��+B -� �a- -�:��!�~3�+0���N # -��(Z&,� `> �� :�+0�!��3%&%�.�7���<a[�<�R�a- -�:���+% ����"�7uF�C�<`<3���(y�Vb,���NL�����'&V���.� a[�7��+0����� ��N 3���� NL:��.`73������

increment�7u� �`<3���w����(.�<�+ 3���� pC���. �aF�������NR3���� �������

����`<���<������3 �v�~3%����`<�0��������30+c�~3�+,NL�����d -i� ��� -���73��<�c -��(����73�:;����+%��3X -+X -�Z�a- -�:����

int& increment (int& i)

{

return ++i;

}

^_�6(��������"3�����+ #[&,�c�D:.+G3j�d M/[�X+0:;���c3��. �3 3����X� uF������+0+E��������N ����NL�7������`��%3k�*�i�c3��. �32&,�,���<3�:;�������NL�7��+%3�� # !$#0H"�<�>8X(;!$=�,.= D ��p.rs��`<3>�j5 ����+0��(��<�XNL���%�7u; -�6�.��V3����!NL�����M&%����� NL:��.`73������y�

int& foo ()

{

int k = 1;

int& j = k;

return j;

}

b,�.��+����> -��+y30����:;p.�� #�+0����`��j30�.�j+E3����� ���� (�:��� �3������"��NF3����ja- ����L �p.��k�7u*� �~����+ &%����� 3���� NL:���`<3������

`> -�y30�<�������. �3��<+��v^_N�&,� ���M&)&%�0��3��RNL���%� u� -�6�.��

int& j = foo(); // j stores an expired address

std::cout << j << "\n"; // undefined behavior

a- -�:��! ��.(��<hi��`73B ���� :���(.�7T ����(y�

The output operator.�-:�+E32��~/[� 3����X���C�7�� �3�����+

* -��(

==#�&,�c���6� ���������3 3����,��:�3E� :;3 ���C�7�� �3����

-+X D����������� pC�<�,NL:���`<3������y�2b,�.��+c�<�.+E:��0��+%3��. �3,&,� `> -��&X����3��

std::cout << r; // operator <<(std::cout , r)

$V �aF���.� 3��������C�7�� �3����6 -+6 �����Dpi�<� &,��:.�(4������ -���'&\:�+ 3�� ���~3����<� &X����3��3�����NL:���`<3������. -����3� �3������

r.operator <<(std::cout)

���c3����"� ��:���a� ������3X���C�<�� �3����c����3� �3������

r << std::cout;

���&V����`���3���� +E30���> �� `������<+c� -+E3 zF3�����+,��+c����3X&%�. �3,&,� &c -��3>�b�� &%����30��3���� ��:�3E� :;3����i�<�� �3���� #c&,� �. �a[� 30� /*�.�'& 3���� 3k�*�C� ��NR3���� +E3� -��(. ���(���:;30�.:;3

+E30�0�> -�std::cout

�2bc����+g3k���C�V��+std::ostream

�2$%�7���B��+g3����V��:;30�.:;3 ���C�7�� �3���� NL��� 3����V3k�*�C�Rational

�v� �R:�+0� NL�����d - � ��� ����<3��<� -��(���73�:;��� 3k�*�i�B��Nn���<NL�<������`��R3k�*�C�std::ostream&3�������+0:;��� 30� M3V3���� +E30�0�> -� `> �� pi� ���*(���T.��( ,.#�B ��+%���<3�:;������( -+B �� ~a� -�:.�! -�[ -����# -���'&V���.�

`> -+E`> -(���( ��:;30�.:;3% �+X���

Page 164: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P�? �_� ��� ����� �q � �+� �

std::cout << r << " " << s;

$%�<���"��+ 3���� -`73�:. -C���C�<�� M3����>�

std:: ostream & operator <<(std:: ostream& o, Rational r)

{

return o << r.n() << "/" << r.d();

}

4.1.12 The first class revisedmy�<3 y@+y����`<���.+E��(��<����:;� �����������. --`�L -+0+

Rational#� -N�30�<� �����. -��`������c��3y&V��30�!�D:.~3����.���`> M3�������#7� �*:. -��

��3k� 3���+G3 ��.( ��:;30�.:�3 -+ (���+0`7����pC��(4 �pC�'a[��� b,�.������� �C��+G3��*:�����:�+ `�� ��.���d3�� 3����d�����������. -`�L �+0+d�����Dpi�<��+ 3��. �3d+E������+ -(;aF��+0 �p.��Z���M& ��+�3��. �3�3���� ���C�<�� �30���

*=+0����:��( �. �a[� ���<3�:;���

3k�*�C�Rational&

� SVN�3��<�X -� #�30�.��+ ���C�<�� �30��� ���<3�:;����+ �a- -�:���+ NL���X -� NL:���( �������3� � 3k�*�C�<+ #;+0� &,�+0����:��(Z ��+0� (��D��3XNL���X�� M3������. -C�*:�� pC�<��+<�SV+ �����:���( �� �������7� NL��� NL:���`<3�������+ ��� {*�<`<3������ 8F�����@P # ��3!��+ ������*( ��(��> 30���.:�3 �.�7& NL:���`��

3������. -���3k� ����3�� Z+0�<� ��� �3����. -����+E� -`<� # ��� ����(��<� 3�� >a[����( �i��+0+0��p.����. -���6`<L -+0����+�� my�<3D:�+0� ��. -����+G� �`��D&,� `> -�

math� ^_� -(�(.�~3�������# ��<3 :�+ +0�7� M�� �3�� 30�.� `�L -+0+!(.�7T ����30����� -��( ���6�.����

������3� �3������ N������ 3�����`> -������� �.�0������ -� � bc����`<��> -�4���<` �. -����+E� NL��� 3�����+ M������~p.�� �������+ e +0���{*��`<30����� 8F�����@P.g�#*p.:;3%���<�0�"&,�" ���� +� �3���+GT �<( &V�~3���+0�7� M�� �3��RT.���+��K �0������ -� � � `�����3� -����+,3����"`<L -+0+

Rational# ������� &%��3��3����"����������� pC�<� NL:���`<3�������+c���C�<� �

�3����.�!���3����V3k�*�i�Rational

�2b,�.�7�����M&U�. �a[�B�. -����+E� -`<�V+0`����C�-�gKv�������� -� ��8 `<����3� -���.+j3����main

NL:��.`73������ -��( :.+E��+X3����"`�L -+0+Rational

�// Prog: rational .h

�// Define a class for rational numbers

�#include <iostream >

�#include <cassert >

�namespace math {

class Rational {

public:

���Rational ();

� �// POST: * this is initialized with value 0

���

���Rational(int n, int d);

���// PRE: d != 0

���// POST: * this is initialized with value n / d

���

� �Rational(int n);

��// POST: * this is initialized with value n

��

� �int n();

Page 165: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �>P[I

� �// POST: return value is the numerator n

� �

� �int d();

� �// POST: return value is the denominator d

� �

� �Rational & operator *= ( Rational s);

� �// POST: * this has been multiplied by s, and

� // the return value is the new value

� �private:

� �int n_; // numerator

� �int d_; // denominator; invariant: d_ != 0

� �};

� �

� �Rational :: Rational ()

� �: n_(0), d_(1)

� �{}

� Rational :: Rational (int n, int d)

� �: n_(n), d_(d)

� �{

� �assert (d_ != 0);

� �}

� �

� �Rational :: Rational (int n)

� �: n_(n), d_(1)

� �{}

� int Rational ::n() { return n_; }

� �int Rational ::d() { return d_; }

� �

� �

� �Rational & Rational :: operator *= ( Rational s)

� �{

� �n_ *= s.n_; // multiply *this by s

� �d_ *= s.d_;

� �return *this; // and return it

� }

� �Rational operator *( Rational r, Rational s)

� �{

� �Rational t = r;

� �return t *= s;

� �}

� �

Page 166: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P�P �_� ��� ����� �q � �+� �

� �bool operator ==( Rational r, Rational s)

� �{

� return r.n() * s.d() == r.d() * s.n();

� }

� �

� �std:: ostream & operator <<(std::ostream & o, Rational r)

� �{

� �return o << r.n() << "/" << r.d();

� �}

� �}

Program 22:(0=>!�@$� �0=�,5���J!$#�,5*-W-�

�#include <iostream >

�#include <cassert >

�#include "rational.h"

�int main () {

�math:: Rational r(3,4);

�math:: Rational s(1,2);

math:: Rational t = r * s;

���assert (t == math:: Rational (3 ,8));

� �std::cout << t << "\n";

���

���return 0;

���}

Program 23:(0=>!h@.� �0:;�L�>=�,5���J!$#�,5*-W r

The benefit of argument-dependent lookup.�X�<`> -�23���� M����:�������3 �_(��<�C����(�����3!��*��/*:;� N��0���

{*��`<30�����6?;�������>] ��3�� ����+0���a[�c3����%`> ��r * s

&V�~3��r -��(

spi�������"��N 3s���C�

math::Rational#[3����

�. -����+E� -`<�math

��+!+0�� ���`�����( NL��� `> -��(���(. �3���+! -+"&,�<�_�d^_� ��:;� `> �+0� #�3�����+"��+!�<+0+0����3��L - # +0����`��3���� ������ `> -��(���(. �3�� NL���! �� :��3��~� ���`> �3����������C�<�� �3����R��� 30�.� 3k�*�C�

math::Rational��+R��� 30�.�

�. -����+E� -`<�math

�����3�����:;3v �����:�������3 � (��<�i����(.�<��3 ��*��/F:;� #�&,� &,��:��( �. �a[� 3�� ��: ����N�� 3���� ���C�<�� M3����v`> -��&V�~3��

3����!�. -���<+E� -`��math

� b,����+%��+c�C��+E+0��p.��R���������ZNL:���`<3������. -y����3� �3������Z -��(�&,��:��(Z`<���6� ��<3�����3���&c ��03c��:;�%�<h ���03�+X��N��d �/*����� �� �3������. -C��:.� pC�<�0+X �+X�> �+E� 30� :�+0�" -+%NL:���(. -������3� -C ����~3������<3���`3k�*�C�<+��g^_��(�����(�#;3������ �*:. -���T.��( � a[�<��+E�����Z��N

r * s��+

math:: operator *(r, s)

�����.+G3��<�,&,�y@( �� �3����<�X �a[����(y�

Page 167: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �>P[o

4.1.13 Goals

Dispositional.S,3,3�����+,�C������3 #*�[��:Z+E�.��:��(=�����

�)g6pC�" �p.�� 30� �7u*�.L -���3���� �.:;�0�C��+0� ��Nv `�L -+E+X���Z5XW Wiz�$g�:��.(��<�0+E3� -��( 30�.�d+E�*��3� �`<3���`> �, -��(z+0���d ���3���`� -j3��7����+ -+0+0��`��L �30��( &%��3��z5XW W `�L �+0+0��+ #j���� M�03���`�:�L M� Bc,5�J,68��>8�S��>=)� # 82�>8GS>�>= Kh:4# � ���"!$#0� #� -��( 30�.�" -`�`<��+0+c+E�C��`��~T �7��+

public: -��(

private:z

8.g�:��.(��<�0+E3� -��( 3��. �3 NL:���`<3������ � �����+ -��( ���C�<�� �3����!30��/[����+ `> -� pC�6�'a[�<����[ �(.�<( # -��( 30� M3����`�� ��.��+0��+, ���� ������(���(Z3��D����+0���a[� �'a[�<����[ -(���(�NL:.��`<30������`> ���+>z

?5g�:��.(��<�0+E3� -��( ����NL�<�0����`��Z3k�*�C��+ #% -��(43����Z(���h �<������`�� pC�<3k&,�����w`> -���_p�� �_a- -�:��� -��(�`� -��� p*� �����NL�<���<�.`<� +0���d -��3���`�+�z

I$g�:��.(��<�0+E3� -��(�3���� `�L -+E+math::Rational

-+X���~a[���Z����K �������� -� � �*�

Operational.^_��� ��03���`�:�L �� #��[��: +0����:.�( pC�" �p.��B3����<�>�

ek}D�)g�T.��(+E�F��3� -`<3���`> -i ��.(+0���d ���3���`� - �<�E������+,��� ����a[���`�L -+E+ (.�7T ����30�����d -��( ���6� ���������3� �3������+z

ek} �$g �(.( NL:��.`73������. -���3k�630�6 ����a[���Z`�� -+0+>zek} 8.g�&X����3��R+0���6� ��V`�L -+E+0��+%��� �[��:��X�'&V�0zek}R?5g�T.��( 30�.�"�d �3�`�������� (���`�L ��� �3������d3��6 ��Z�Ma[�7����[ -(���( NL:.��`<30�����Z`> -��zek}"I$g�&X����3��RNL:���`<3�������+ 3��. �3c��� ��:.�~��� �0��NL�<������`��"3s���C�R� M�� -���<3��7��+��

4.1.14 Exercises

Exercise 63

, �m�[#�B ,5*/*_�>= =>!$=)�s�/# �V�;� KL!.*/* !$1��/#;@s(0=>!h@$=�,.8�W �m�-&6�V�;�>8 ,.#�B B � ���>= � S>�f�V�;� Kh:4# � ���"!$#0H,5*d����DE! K?�V�;� ��D)(I�

ClockAFS DG(0=>!$p�"B.�[#;@R(0=>� H ,.#�BG(;!.�>�<��!$#�B.�/���J!$#0�sK�!$= �V�;� 8��>8�S��>=

Kh:4# � ���"!$#0�LW ek} �)g'ek} �$g

�#include <iostream >

�class Clock {

�Clock(unsigned int h, unsigned int m, unsigned int s);

�void tick();

�void time(unsigned int h, unsigned int m,

�unsigned int s);

private:

unsigned int h_;

���unsigned int m_;

Page 168: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>P�# �_� ��� ����� �q � �+� �

� �unsigned int s_;

���};

���

���Clock::Clock(unsigned int& h,

���unsigned int& m,

���unsigned int& s)

� �: h_(h), m_(m), s_(s)

��{}

��

� �void Clock::tick()

� �{

� �h_ += (m_ += (s_ += 1) / 60) / 60;

� �h_ %= 24; m_ %= 60; s_ %= 60;

� �}

� �

� �void Clock::time(unsigned int& h,

� �unsigned int& m,

� unsigned int& s)

� {

� �h = h_;

� �m = m_;

� �s = s_;

� �}

� �

� �int main() {

� �Clock c1 (23 , 59 , 58);

� �tick();

� unsigned int h;

� �unsigned int m;

� �unsigned int s;

� �time(h, m, s);

� �

� �std::cout << h << ":" << m << ":" << s << "\n";

� �

� �return 0;

� �}

p4g ^_�6�.������<��3, -� ��:;30�.:�3X���C�<�� �3����cNL���X30�.�"`�L -+E+Clock

� ek}!I$g

Exercise 64r !$89(+* �>�<���V�;�s� *-,5�>�

RationalKh=>!$8 a =>!�@=�,.8 ���6S D9�/89(+* ��82�>#0���[#;@9�V�;� 86�/�>�>H

�/#;@G,.= ���V��8�� ���J��,.#�B?=>�>* ,5���"!$#�,5*�!>(;�>=�,5�<!$=)��Kh=>!$8 � ,cS)* ��W���� ��� DN!$:N=Y�h!�B � � ek} �$g

Exercise 65 � =h,5���J!$#�,5* #I:48GS>�>=n/d

��� �������d -�� � ��( � K #I:48��>=�,5�<!$=n

,.#�BUB �># !$8Y�/#�,5�<!$=d

,.=>�f=>� *-,5���/p�� *dDF(0= �/8��>A 82�',.#I�/#;@6�V�4,5� ��`<((n, d) = 1

W � BcB ,9(0= �/pw,5�<�f82��8�S>��= K�:N# � ���J!$#

Page 169: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q � � ���V� � � ��� � �0� �>P�q

void normalize()�<!R�V�;�Y� * ,5���

RationalK�=>!$8 a =>!�@$=�,.8 ��� ,.#�B6:;���f��� �<!2�>#0��:N=>�

// invariant d != 0 , n / d is normalized.

��� �>��DN!$:N=Y�h!�B � � ek} �$g

Exercise 66 � ��� � :u�># ���X! K � +E��:�(.���� -��(.������:.� pC�<�0+ �',.# S��k@c��# �>=�,5�<�hBRS>D �V�;� *d�/# �',.= ��!$#0H@$= :u�>#0���",5*_82� �V�;!LB ,5��KL!.*/* !$1�� W � �[p��>#Q, � :��3��~� ����<�

a � NAk,.# ��hi+0�73

b � NAb,?82!�B.:4*P:4�

m � � ,.#�B , +E����(x0 � � A3�V�;�F��� � : ��# ���F�/� B � { # �'B2S DG�V�;�X= :;* �

xi = (axi−1 + b)���*(

m, i > 0.

, � 89(+* �>8��>#0� ,2� * ,5���Random

K�!$=f@c�># �>=�,5���[#;@M,?�L� � :u�># ���?! K�(+����:uB !$=�,.#�B !$8doublepw,5*d: �>���/#

[0, 1)A_S�,5�L�hB !$#R�V�;��*d�/# �',.=i��!$#;@$= :u�>#0���",5* 82�>�V�;!�BcW �m�;� � *-,5�>� �>�;!$:4* Bs�4,.p��

, �h!$#0�>��= : � �<!$=�K�!$= (0=>!$p��"B.�/#;@9�V�;� (4,.=�,.82� �<��=)�(a, b, m, x0)

,.#�B ,X8��>8�S��>=�K�:4# �>���J!$#�V�4,5�3=>� ��:4= #0� �V�;�X=>�>�"(I���>���/p�� # �'&5��(+���>:+B !$=�,.#�B !$8 #I:48�S��>=F�[#U�V�;�F�L� � :u�># ����W

S \ = ���<� ,6(0=�!�@$=�,.8 �V�4,5� �<� ���V�Y�V�;�G� *-,5�>��K�!$=2�h!$# �>=>� �<�6pw,5*P:u� �R! Ka, b, m, x0

W � !$8��� *-,5�>���"�h,5*0(+���>:uB !$=h,.#�B !$8 #I:N8�S>��=�@c��# �>=�,5�<!$=)�?, ���h!$=�B.�/#;@2�<!G�V�;� *P�[# �h,.= ��!$#;@$= :u�>#0H��� ,5* 8�� �V�;!�BF,.=���K�!$:N#�B ,5�

http://random.mat.sbg.ac.at/results/karl/server/

node4.htmlW

ek} 8.g

Exercise 67r !$#0�h�"B �>= �V�;��KL!.*/* !$13�[#;@?�L� � ! Kf�V��=>�h� K�:N# � ���J!$#0�LW

void foo(double , double) { ... } // function A

void foo(unsigned int , int) { ... } // function B

void foo(float , unsigned int ) { ... } // function C

� !$=R�h, � ��! KX�V�;��K�!.*[* !$1��/#;@ K�:N# � ���J!$# �',5*/*P��A B �h�>�"B � �<!R13���J�>�U! KF�V�;� Kh:4# � ���"!$#0� �A, B, C ���3=>� ��!.*dp�� �X�<!$Ab!$=YB �����"B �F�V�4,5� �V�;�Y�',5*/* ���F,.8�S>�[@$:u!$:;�LW ^ &)(+* ,.�[# D`!$:4=�B ���>�/���J!$#0�LW ek}R?5g

$gfoo(1, 1)

p4gfoo(1u, 1.0f)

` gfoo(1.0, 1)

(Ngfoo(1, 1u)

� gfoo(1, 1.0f)

NJgfoo(1.0f, 1.0)

Exercise 68\ = ���<�Y, K�:N# � ���J!$# �V�4,5� ��1�, (+�f�V�;� pw,5*d: � � ! Kf��1b!

intH"pw,.= � ,cS)* �>�LW ek}"I$g

;���%� u� -�6�.�� #

Page 170: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'o�] �_� ��� ����� �q � �+� �

int a = 5;

int b = 6;

// here comes your function call

std::cout << a << "\n"; // outputs 6

std::cout << b << "\n"; // outputs 5

Exercise 69\ = ���<�M,�(0=�!�@$=�,.8

random_triangle.C�<! ���/8Y:;*-,5�<� �V�;�fK�!.*/* !$1��/#;@]=�,.#�B !$8

(0=>!�h� �>�i@$=�, (+���"�h,5*/*dD W r !$#0���"B ��=�, { &`�hB?��= �",.#;@.* �t,.#�B �>�;!!.��� ,.# ,.=S>����=�,.= DRp���=)�<�'& ! K

t,5��,G���J,.=)���/#;@F(I!$�[#0�JW � # �', � �M�>�<�J(0A � �;!!.���Y,5��, # �'&q� (I!$�[#0���V�;�F86� B (I!$�/#0� S�� ��1b���>#Q�V�;��>:N= =>�>#0�m(I!$�[#0�k,.#�B2, �J:4#I� K�!$= 86*PD =�,.#�B !$8?*dDG��� * ��� �<�'B p��>=)�<�'&]! K

tW

�m�;�?���/8Y:;*-,5���J!$# ,5�F�', � ���>�<�J( B.=�,.13�?�V�;� �>:N= =>�>#0� (I!$�[#0�s�/#0�<!U, \ �/#�B !$1�W � ���6�V�;�1��/#�B !$1 !�S � ���>� ifm::wio B � { # �'BM�/#

<IFM/window>KL!$=�@=�, (+���J�',5*b!$:4� (0:;��Ai,.#�BU�>�;!!.���

�V�;����= �",.#;@.* ��1��/�V� p���=)���J���>�(0, 0)

A(512, 0)

A ,.#�B(256, 512)

W � ���G�V�;��=�,.#�B !$8 #I:N8�S��>=@c�># ��=�,5�<!$=sK�=�!$8 ^ &`��=>�>���L�

� �13�/�V� (4,.=�,.82� �<��=)�

a = 1103515245A

b = 12345As,.#�B

m =

231�<�V�;� ��!.H'�h,5*/* �hB � � � � H r @c�># �>=h,5�<!$= �<! 8G,5Zw�R�V�;�R=�,.#�B !$8 �>�;!$�J���>�LW � �FS>� @$�/#IAX�V�;�

(0=>!�@=�,.8 �>�;!$:4* B =>�h,cB��/# , �����'BkK�!$=i�V�;�s=h,.#�B !$8 #I:48GS>�>=s@��># �>=�,5�<!$= ,.#�B �V�;�s#I:N8�S>��=�! K���[86:;*-,5���J!$# ���<�J(+�i�<!i(I�>=VK�!$= 8GW � !$=9�<� �>���[#;@f(0:4=<(I!.���>��A * � �3�V�;�X�h�/86:4* ,5���"!$#M= :4# K�!$= ,cS�!$:;������$A �����Y�>�<�J(+� W

Page 171: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �'oF�

4.2 Dynamic data structures

�������M���h� ���J!$# �'&)(+*-,.�/#0� �;!$1 B.D5#�,.86�"�CBc,5�J,Q�>��= :u� ��:4=>�>� �',.# S>� =>�h,5*d� �5�hB �[#rbtXt W �_!$=FB.D5#�,.86�"� Bc,5�J,��>��= :u� ��:4=>�>�s��� ��� # !.� Z�# !$1�# ,5� �h!$8X(0��* �f���/8��i�;!$18Y: � � 82�>8�!$= D �V�;�>DM1���*[* :;����W \ ���/#0��=>!LB.: ���?�V�;� rbtXt �h!$# ���J(+�i�<!��/89(+* � H8��>#0�XB.D5#�,.86�J� Bc,5�J, �>��= :u� ��:4=�� ��A #�,.8�� *dDqA�(I!$�/#0�<��=)�G,.#�BUB.D5#�,.86�"�Y8��>82!$= D8G,.#�,$@c�>82��#0�JW ��!$:71���*/*s,5*P��!�* �h,.= # ,cS�!$:;�?��!$#0���VH � :+,5*P� { �h,5���J!$# 13���"� � ���M,8���� �4,.#I�/��8 �<!���#0��:4=>�9�V�4,5��,.#E!�S � ���>�����s# !.��82!LB.� { �hB.AIKL!$= �'& ,.8X(+* �>A 1����V���[#,2���>=)�J,.�[#?K�:N# � ���J!$#�W

���.����V(���+0`�:�+0+E����� ���M& 3�� �<a- -�:. �3��B M����3������<3���`c� uF������+0+E������+ &,�B(.��+0`��'a[�<����( -��(��7uF�.����~3���(3��������,���<`�:;��+0��a[� +E30��:�`<30:��0���jS%�y �����30�.���73���`%� uF������+0+E������+XpC��+E��(���+ 3���� �������d M�0�6������+ke a- ����L �p.��<+ -��(����3��<�� ��+ gg ��0�"`����6�i��+0��(N������ e_+0:;p4gG�7uF�����<+0+0������+��jbc����+,��� -(�+,30�D3����R����+0������3 3��. �3c�7uF�����<+��+0������+V`� -� pC�!`����6�i��+0��(6rs:�+E3R -+V��:��DpC�7��+%`> �� pi� `����6�C��+0�<(n�� ;���B�7u; -�6�.��"&,�!`> -� -(�(Z3�����7u*�.�0��+0+0������+

3 + 4 � x ��.(2 � x

3��X���<3 30�.�2�7u*�.�0��+0+0�����3+4 � x+2 � x �2^_N*&,�2&c ���3y3��X3E���> �3� �����30�.���73���` �7u*������+0+0�����.+ ���/[� �*:�� pC�<��+ -�+E� ��� 5XW W�#;&,�"� �a[�R3�� p.:����(��:;�%�'&V� 3s���C�R&V����`���&,� `�����a[�������<��3���`> ��

Expression�

mn�73 :�+�T���+E3+0:����d ���� � ������NL�����d ���� 3���� NL:���`<3������ ����3k� &,� �7u*�C��`<3� -� �7uF������+E+0����� (. �3� +E30�0:.`73�:;��� 30� �����'aF��(���� � �R&c -��3c3���>���

� `�����+E3E��:�`<3 �������d ��0�=�7uF�����<+0+0������+ +0:�`��4 -+ `�����+E3� ���3�+ ���D+E�*�DpC�����` a- ����L Mp ���+>z2��<3 :�+ pC�����(.�<+E3c -��( rs:�+E3%(����d ��.( �����"+E�*�Dpi�����`Va- ����L �p.���#F+� �� #

xz

� `����6�i��+0� �7uF�����<+0+0������+R:�+0�����30�.� p -+0��` M����3������<3���`"���C�7�� �3�������+ #ip.���. ��E� +#-#*#/#y -��(

:��. ��0�-z

� �<a- -�:. �30�! -� �7uF�����<+0+0����� NL���% D`<�<�03� -��� a- -�:��"��N xz

� `����6�.:;3��B3���� (.�7����a- �3���a[�R��Nv -���7uF������+E+0������#�����3��7�0�����<3���(� -+V ���� - NL:���`<3���������� x�

SV+" ���7u*3!+E30�<� &,�D+0����:.�( 3������;/ �pC��:;3 ���M&| -�= �����30�.���73���` �7u*������+0+0����� ��+R3��pi�D���7�.�0���+0����3���(y�g�=�!�. �a[� -��0�> -(;�+0����� +0:�`�� �0�<������+0����3� �3������ #��. -����~� #*3����!:���� �*:�� �7uF�����<+0+0�����Z30�0��� -+0+E�*`��L M3���( &%��3��� -�Z�7u*�.�0��+0+0�����y�SV� �7u*�.�0��+0+0�����Z3E����� ��+c�d -(�� :�� N��0��� ���*(���+X`������.�<`<3���( p*� ��(�����+��,Kv�����d M�0��7uF������+E+0������+

����D���<������+E����3��<( p��=��> -Ng����(.�<+���b,�.�D30����� ��+R���*��3��<( ���> -��������3��. �3"���.� ���*(��Ye 3���� ������3'gV��+(���+E3����.��:���+E�.�<(n�Vbc��� ���*��3V��+B`��.��+E��� 3���pC� 30�.� ���*(�� 3��. �3%���<������+0�<��3�+R3���� &V������ � uF������+0+E�����y�b,�.�,�������C�<�E3s�D3�� pC�c�0�*��3���( � �+23����c����`��c`�����+0� �*:�����`��X3��. �32��3�+2��(�����+ ��0�X���6�.���`���3��� (������<`<3���(�0 �&c �� �BN������Y30�.�j���*��3 -��( 30� M3�3�����+ ���0������3� �3������"����`��*(���+ 3���� �/�>HJ�h:uS>� &)(0=>� �>�h�J!$#0Hh! K �0��L �3������ � -������� 30�.�!�7uF������+E+0������+V���<������+E����3��<( p���3���� ���*(���+<�V^_� 3���� NL�����'&V���.�D&,�!&c -��3%3���(���+0`<:.+E+B

� � "������ �F�=3 ���� ���� ��'�D�����)�*������������6��'�'��)@ ���� �<2�� ��� � ����� ��1����'�������( G

Page 172: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'o � �_� ��� ����� �q � �+� �

3 4 2 xx

**

+

+

Figure 8: � BcB.�/#;@ �V�;� � &)(0=>� �>�h�J!$#0�3+4*x

,.#�B2*x

�/#7�V�;� �'& (0=>� �>���"!$#7��=>��� =>�"(0=>� ���>#0�J,5H���J!$#�W

&c �� 3�� ����(���v�7uF�����<+0+0������+ e_ -+R�7uF������+E+0�����=30�0����+ gR��� 5cW"W � % �3�:;�� -v�<��3���30����+B3��. �3R&,� �. �a[�3�� ���*(���y ����R3���� �.��(���+% ��.(���(�����+%��Nn3���� 30�0�����

;��� ��:;�!�.:;�0�C��+0��+ -� �7uF������+E+0����� �E��+ �Z ����*(�� #��. -���<�� #n30�.�D���*��3!��N 3����� -+0+E�*`��L M3���( �7u �������+0+E����� 30�0�����2^_������(��<�,3�� ���7�.�0��+0����3X3����R(���hi�7������3,3k�*�i��+,��N �7u*������+0+0�����.+ &,�R������(�30� pi�" Mp ��3�� +E3������

� �*:�� pC�<�c��N 3k�*�i� double #

� +E�F� pC�����`%a� M���L �p.�� x #

� T.�.�~3��R+0�<3X��N ���C�<�� M3�����+be p.���. ��0�d���C�7�� �3�����++#-#*#/#. -��(Z:��. ��0�

-g�#

� -��(Z:;�Z30�D3k&,� +E:�p �_�7uF������+E+0������+��b,�.�D���C�<�� �3���� �d ��ZpC�D����`��*(���( ����3�� d�����Dpi�<�Va- ����L �p.��

op��N23k�*�C�

int# NL���"�7u� ��6� �� #ip*�

��(�����3���N��F���.�+&V�~3��

1#-&%��3��

2#-�<3�`�� S%�+0�%3����23s���C�g��NF30�.�g�7uF������+E+0����� `> -� pi� ����`��*(���( ����3��

op#

:�+0����� 3����B`�����a[�<��3������3��. �3−1

`����0�0��+E�C����(�+ 3�� +G�F� pC�����`ca� ��0�L �p.��B -��(0`����0����+G�C����(.+ 3��D

`�����+E3� ���32�.�0���d ��0� � uF������+0+E�����y� �=�X�d �� 3����<�0��NL�����Xpi�X3����6��3��<( 3��"`����6�.��<3�� ��:;�Expression`�L �+0+% �+XNL�����M&%+��

class Expression {

...

private:

int op; // encodes operator /expression type

double val; // stores constants

Expression left; // left subexpression

Expression right; // right subexpression

};$%�'&,�<a[�<� #;3����<�0�!��+X ������p.��<�\&%��3��3����! �pi�Ma[�"`��*(���� � �"(.�7T ����( 3����!`�L �+0+c�0��`�:;��+0��a[�<��+0:�` �3��. �3! -� �7u*�.�0��+0+0����� �. -+"3s&,� �7uF�����<+0+0������+ -+! ����� pC�<��� �g:;3!3����<�0� ��+"�.� &c >� 3��Z�<�.( 30�.��+����`<:��0+0����� �!� �D������(= �&c �� 3���7u*�.�0��+0+"30� M3B3���� 3k&,�+0:;p � �7u*�.�0��+0+0������+" ���� ����3������. - #i -+ #yNL�������+E3� ��.`<� # �������d ��0�d� uF������+0+E����� (.����+V����3V�. �a[� -����+E:�p �_�7uF������+E+0�����y�%b,�. �3V��+ #.&,�"� :�+E3%����3

Page 173: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �'o�8

+E3����0�V����� pC�<� a� M���L �p.���+j��Ni3k�*�C�Expression

�2^_��+E3��> -(6&,�%�.�<��( "(���h �<������3 3k�*�C�%&%����`��6�d ������NL�7� 3��B -� 1 uF�����<+0+0����� p.:;3 �d ��" -�+0�c����NL�<��3�� �E����3�������� �;��^_�D5cW W�#-30�.��+ /F���.(!��N;NL:.��`<30�����. -���3k���+,�����Ma*��(���( p�� (;!$�/#0�<�>= ��D)(I� � �

4.2.1 Pointer types ;���V ����d3k�*�C� � 3���� `����0���<+E�C����(������ (I!$�[#0�<�>= ��D)(I� ��+

� �

� ��`> -� �O3�����:���(��<����*����� 3k�*�i�Z��N ���>��b,��� a- -�:��Z��NR -� �7u*������+0+0��������NV3k���C� ���=��+D3���� -(�(;����+0+X��N -����p rs��`<3X��N 3k���C� �g�S)NL�<&)+E3� -��(. ���( ���C�<�� M3�������+ ���� (��<T.����(�����C������30�<� 3k�*�C��+<� ;���c����+E3� -��`���#*3k&,� ��p.rs��`<3�+,��N

3k�*�C�T*`� -��pC�%`����6� ��0��(6NL��� � ��:. -���3k�Ye

==g2��� ����� ��:. -���3k� e

!=g7�vSV�6�0a- -�:�� ��Ni3k�*�i�

T*`> -�

pC� -+0+0��������( e=gR3��� -� �a- -�:�� � ��Nj3���� +� -��� 3k�*�C�-� X��3�� 3��. �3"��3!��+!����3!+E: � `�������3!3��. �3 3����:���(.�7����F���.� 3k�*�C� ��N � ��+X`�����a[�<�03��~p �� 3�� T �

int* i;

int* j = i;

assert(i == j);

Address operator.� � `> �� ��p.3� -���!3����g -(�(��0��+0+ ��N� -��� ��p.rs��`<3�p�� M�.�.��*�����X3����j:.�. ��E� ,cBcB.=>�>�>�

!>(I�>=h,5�<!$= 3��d��3>� ^_N230�.� ��p.rs��`<3R��+B��N 3k�*�C�T#i3������ 3���� ����+E:.~3R��+R -� �0a� ��:�� ��N23k�*�i�

T*�"bc���

+E�*��3� Mu ��Nv �� -(�(;����+0+c���C�<�� M3����%`� -�C��+

� � � � � �

^_�Z3����!NL�����M&%����� `<�*(��!N��� ���������3X&,�!:�+0�!3����! -(�(��0��+0+V���C�7�� �3����c3��6������30�L -�� � �R Da- ����L �p.�� iptr��N 3k���C�int*

&V�~3�� 3����" -(�(;����+0+c��Nv -�Z��p.rs��`<3c��N�3k�*�i�int

�. -����(i�

int i;

int* iptr = &i; // iptr initialized with the address of i

Dereferencing.{*�=N M�D&,�d/F���'&\���M& 30� ���<3D3���� -(�(;����+0+D��N% ��z��p.rG�<`<3>� �g:;3 3����� �(.(;���<+0+

��3�+E���Ni��+j������ ��N �������3��<(Da- -�:���� ����+E3�~� &,�c&c -��3j3�� -`�`<��+0+, -����p.rs��`<3g30���0��:.���d R�C������3��<�g30� M3`�����3� -����+g�~3�+ -(�(;����+E+�� 5cW W)�����'aF��(���+ :�+ ��+0�!&%��3��� !���<` �. -����+E�t3�� (�� +0�;�2b,����+g����`��. -����+0���+ `� -����( B ��=>��K���=>�># �>�[#;@ ��� �[#�B.�/=>�h� ���J!$# � b,����:�� M�0� B �>=���K��>=��># ��� !>(I�>=�,5�<!$=

* M�.�.�����(=3��

-� �0a� ��:�� ��Nc�C������30�<� 3k�*�C�d����a[�<+ ��z�a- -�:��6����NL�7�0������� 3�� 3������p.rs��`<3 &V����`�� 3���� �����:�������3�C������3�+V3��;� ^_N 3���� �����:�������3V��+B3s���C� ��N ��� #i3������ 30�.� ����+E:.~3R��+R��Nj3k�*�C� �g�ybc��� +E�*��3� Mu ��Nj (��<����NL�7������`�� ���C�7�� �3����c`> -�n��+

� � � � �

Page 174: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'o-? �_� ��� ����� �q � �+� �

^ 3"� M�.�i����+!N���� ��:�����3�~�5v -��(=&,�D&V���v+E���6��3 +0����� NL���!3����D�.��(���+!��N ��:;�!�7uF������+E+0����� 30���<��+ v3��. �3B3���� T���+E3 ���C�<�� -��(=��N 3����D���<�DpC�7�R -`�`��<+0+"���i�<�� �3����

.��+R �(��<����NL�<�0����`���( �7u*�.�0��+0+0�����

*p��N��C������3��<�c3k�*�C�-� {*����`�� &%����30�����(*p).dname

# +0 >� #������/F+c+0�����<&%� M3c:.��~� #.5XW W �����'aF��(.�<+% -� �p�p����<a*�L �3�������#�� �������

p->dname�gb,���"���<�.�7�� -y+E�F��3� Mu���N 3�����+cNL�����H��N������ pC�<�c �`�`���+0+X��+

��� � � ���������−� � �� � �

��� � � ���������−� � � � � e ��� � � ����� ��� ��#y�~����# � ��� � ��������� � g

&V���<�0� � ��� � ��������� ��+,��N �C������30�<� 3k�*�C�R&V����+0�B:���(��<����*����� 3s���C�R�. -+c ( M3� ����� pC�<� � �� � � #���% D����� pC�<�,NL:���`<3������ � �� � �'�

Null pointer. ;���2 -��� �C������30�<� 3k�*�C� 3����<�0�c��+ %a� -�:.�,(���+E30������:.��+0�. �p.��jN��0���� -��� ��3����<�v�i������3��7�

a- -�:����2bc���%a- -�:��V��+ `> -����(63���� #I:;*[* (;!$�/#0�<�>=fpw,5*d: � � bc���B����3������<� a- -�:��0`> -��pC�V`�����a[�<�03��<(

3�� -���=�C������3��<�"3k�*�C����bc��� a- -�:��� �N�3��<� `�����a[�<��+0����� ��+"3����6�*:�� �C������3��<�!a- -�:�����bc��:�+!&V������<a- -�:. �3����.�"3����B�7uF������+E+0�����

int* iptr = 03����Va- ����L Mp ��

iptr���73�+ ������3��L ��� � ��(D&V��30�63����B�*:��

�C������3��<�,a- -�:����jbc��� �*:��C�C������3��<�c� :�+E3c����3cpC�"(��<�0��NL�<������`��<(n�

Initialization.^_� `�����3E�� -+E3 3��=����NL�7������`���+6&%�.��` �z� �a[��30�=pC�����.�~3��L -�� � ��( -�&c ��F+ # ��p rs��`73�+ ��N

�C������3��<� 3k���C�B�d �� pC�V:���������3��� -�� � �<(n��bc���B�<h ��`<3,��Nn(��<����NL�<�0����`������D -� :���������3��� -�� � �<( �C������3��<�g��+:���(.�7T ����(Z -��(Z:�+0:. -����`7�� -+0����+c3���� ���������� �� �

int* iptr; // uninitialized pointer

int j = * iptr; // trouble!

b,�.�B�C������3��<�iptr

�C������30+ 3�� �����0�B���,���+0+ �� -��(����\ -(�(;����+0+,������������0� -��((.�7����NL�<���<�.`<�������3c���> -��+ 3�� -`�`���+E+X3���� ���������0��`�����3�����3V �3c3�����+c -(�(;����+0+<�g^_�Z���<�.�7�� - #F3�����+X -(�(;����+0+,&V���C����3pC������.�B3��B3���� � ��03 ��N.���������0�"3��B&V����`��D30�.� ���������� �� � �+ -`�`���+E+ #* ��.(D3����,���C�<�� �30�����B+E�F+E30���&V���i(������� -`�`<��+0+X30� ��3X -��(�3��7�������. �3��V3����R���������� -�O&V�~3��Z ��� @$82�>#0�J,5���"!$#RKL,.:4*T� �{*:�` � �<�0�����0+ �������N�3���� (�� �6`�:��3"3�� 30�� -`�/ (��'&V� pC��`� -:�+0��3����<� ����C�> M� �3 ��:���30����� ������[�

b,�.�7����NL����� #,�C������3��<��+ �. >a[�Z30� pC�Z:�+0��(w&V��30� `> ���� ��.( ���<NL�<������`���++0����:��(4pC�Z:�+0�<( ����+E30�> -(&V���<�0�<a[�<�%�i��+0+0��p.���� X�7a[�<�03�������<+0+ #�+0�����<3�������+g3���� :.+E�!��N��C������3��<�0+c`� -���.��3cpC�" �a[����(���(y�

The this pointer.S 3V30�.��+X�C������3V&,� `> ��= -�+0�6���N�3%3���� `�:;�03� -��� 30���7uF�C��+E� 3���� +E30�� ��.���

*this����3� �3������63��. �3 &c -+ :�+0��(���d3����B���6�.���������3� �3������D��NC3����R`�L -+0+Rational

�j5 ���.+E��(��<�c `�L -+E+T�

^_� 3���� pC�*(;� ��N. -��� ����� pC�<� NL:.��`<30����� ��NT#�3���� �0a- -�:��

this��+v��N�3k���C�

T* -��( ��3�+ a- -�:�� ��+ 3����

-(�(;����+0+ ��Ny3����B��p.rG�<`<3 NL���,&V����`���3����BNL:��.`73������d��+ `> -����(y� bc�. �3 ��+ #*3����B+E3� ��,����3����B�7uF�����<+0+0�����*this

��+2+0���6�.�� 3����c(��<����NL�<�0����`��V���C�<�� �3���� &V����`�� (��<�0��NL�<������`��<+g3�����+2���6�.���`���3n�C������3��<�this

3���F�����(�3���� ��p.rs��`<3%��3�+0���N�&V����+0� ���<�DpC�7�XNL:���`<3������ ��+%`> �����(y� X��3�� 3��. �3

this��+V ��Z�0a� ��:�� # +0�

����� `> -������3 # NL���B�7u� ��6� �� # �+0+0�����Z3��this

� e ;���B�����*(Z���� -+0����+V��N �[��: 3������;/Z MpC��:;3V��3>� g$�g:;3*this

��+c -�Z�a- -�:��B&V����`���`� -��#��i��3�����30�L -��� #�pC� ���*(���T.��(y�SV����3����<� &c �� 3��R3������;/ �pC��:;3v3����

this�C������3��<� ��+ 3��. �3 �7a[�<�0�D����� pC�<�vNL:���`<3������D��N R`<L -+0+

T�. -+B -� ���6�.���`<��3 � ��� -���<30�<�

this��N 3k���C�

T*� ;���R�7u� ��6� �� # ����� `<��:.�( ���d -�������B3���� `�L -+E+

Rational3�� ��*��/ �+XNL�����M&%+��

Page 175: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �'o�I

class Rational {

...

int n(Rational * this);

int d(Rational * this);

Rational & operator *= ( Rational * this , Rational s);

...

};SV+ 3������ ��� -���73��<�

this��+ -�&c ��F+!30�.�7��� # ��3 ��+ Z:�+0��NL:� `�����a[����30����� 30� ����3 &X����3��6�~3 (.�'&V�

�7u*� ���`���3�~�[� � ����3����.� �~3 (.�'&V� �7uF�.���`���3���= -+D �pC�'a[�d&V���2����+0:��3D��� `����6�.����<�!�<�0�����DpC��`� -:�+0�this

��+X -����> �(��d(��<T.����(Z���6� ���`���3�~�[�

4.2.2 Expression tree functionalitymy�<3 :�+ `�������p �`�/ 3�� 3����

Expression`�L �+0+ N��0��� �pi�Ma[��� � � `�����`��:�(���( 3��. M36 3k�*�C���+

������(���( &%�.��` � �d �� ����NL�<� 3��4 -� 1vu*�.�0��+0+0����� p :;3 �d ��� -�+0� ����NL�<� 3�� �E����3�������� �;��b,����+d��+�7u; -`<3���d&%� M3c30�.�R3k�*�C�

Expression*�����Ma*��(���+��

class Expression {

...

private:

int op; // encodes operator /expression type

double val; // stores constants

Expression* left; // pointer to left subexpression

Expression* right; // pointer to right subexpression

}; X�'&|3��. �3 &,� �. �a[� 30�.�D���<������+E����3� M3������ +0�73�:;� #���3!��+ 3������ 30�Z(���+0`<���~pC� 3���� NL:.��`<30�����. -���3k�

��Nc��:��Expression

`<L -+0+��=bc����+ 3� �+E/ -����:���30+ 3�� (.�<`�L ������.� ��4 ��������������L M3��6`�������`<3������ ��N����� pC�<�,NL:���`<3�������+��

�����+G3 ��NB �� #v&,��������(4 `�����+E3E��:�`<3������4NL��� `�����+E3� ���3D�.�0���d ��0� � uF������+0+E������+ +0:�`�� -+2���

7.125�{*:�`�� �7uF�����<+0+0������+ `> �� pC� `��'a[�<���<( p�� `�����+E30��:�`<3����

Expression(double)�db,�����

&,��d �/[�d `<����a[����3������ 30�=��<3 3����d(���N -:��3D`�����+E30�0:.`73����Expression()

`����E����+E�C����(z30� 3�����������d ��E� � uF������+0+E�����

x3��. �3!� � >�*+!3���� ������6��Nc �+E�F� pC�����`Da- ����L Mp ���� ���� ���� # &,�������<( 3k&,�

������� `<���.+G30��:�`<3�����+V30�6p :����( `����6�C��+0��30�!�7u*�.�0��+0+0������+BN������l ����a[��� ���C�<�� �30������# +� �� #y -(�(���3���������X:.�. ��E� �����*:�+, -��(Z�����"���c3k&,� +0:;p � � uF������+0+E������+��

class Expression {

public:

Expression();

// POST: Set to primary expression x (symbolic variable ).

Expression(double v);

// POST: Set to primary constant expression with value v.

Expression(int o, Expression a);

// PRE: o is unary operator .

// POST: Set to o(a).

Expression(int o, Expression a, Expression b);

Page 176: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'o�P �_� ��� ����� �q � �+� �

// PRE: o is binary operator .

// POST: Set to o(a, b).

};

4.2.3 Copy semantics$%�'&)`> -� `�����+E30�0:.`73����%NL���V D`<���6�C��+0��3��B� uF������+0+E������pC� ���6�.���������3���( ��5 ����+0��(��<�

Expression:: Expression(int o, Expression a) { ... }� � `���:��( `����6�.:;3���3���� -(�(;����+0+��N

a:�+0����� 3���� �(.(;���<+0+d���C�<�� �30��� :�+0���.� 3���� �7u*�.�0��+0+0�����

&a# p.:�3V(.:�� 3��630�.� `� -��� p*� � a� ��:�� +0���d -��3���`�+

a����NL�<��+B3�� -� ��p.rs��`<3B&V�~3�� -:;3����d �3���` +G3����� -���

(�:;�� �3������&V����+0�"���NL�<3������B��+cpi��:.��(���(�p�� 30�.�! �pC�'a[�!`�����+E3E��:�`<3����>� S%+X+0����� -+X30�.� �7uF��`�:;3��������Nv3�����+V`�����+E3E��:�`<3����R��+%T.����+0����(�#.3���� ��p rs��`<3

a`<�> -+0��+B3���� u;��+E3��BS,3%3�����+%�C������3 # &%�. �3V:�+0��( 3��

pC�R3����! �(.(;���<+0+%��Na��+c�.��3X a� ����(Z �(.(;���<+0+%��N� -�Z��p.rG�<`<3%��Nn3k�*�C�

Expression -���*���������

x2��: �d �� ���M&w3������;/ 30� M3230�.��+ ������p.��<�t`� -� pC�,����+E���a[��(6��N�&,�X >a[����( `<���� �3������a -+j B��*`> �

`������Z -��(� �+0+%��3,p�� �_�0��NL�<������`��!����+E3��> -(y�

Expression:: Expression(int o, Expression& a) { ... }

{��F��3� -`<30��`> -�~� #�3�����+v��+ T.����� �g:;3v3���� NL�����M&%�����V+0���6�.��j�7u� -�6�.��j+0���M&%+v3��. �3 &,�,��� N -`<32`<���� �3���( p ��� ����+E+��

Expression f;

Expression e(1, f, f); // f + f

f = e; // trouble!

�j� (��<T.����3������ �� ����� pC�<��+% ���� `����.���<( N������e3��

f� ^_� � ��E3���`�:�L �� # 3���� �C������3��<��+

left -��(

right ��0�B`����.����( ,5��(I!$�/#0�<��=)� �g^_�d3����R �pC�'a[�B�7u; -�6�.�� #[pC��3��d�C������30�<��+ �. �a[�Va� ��:��

&f� SVN�3��7�

3����" -+0+0������������3f=e

#;3���� (. �3� ����� pC�<��+,��Nf��*��/ -+XNL�����'&V+��

� op�1

e �0�<������+0����3������+#���/ g

� val� � e_����3c:�+0��(�#.��/ g

� left�&f

e_���N�3c���C�<�� -��(Z��+% -�[ ����fg

� right�&f

e �0������3c���C�<�� -��(���+X -�[ -���fg

5 ��> ���~� # 3�����+V���<�����<+0����3� �3������ ��> -(�+V3�� -� ���;T.�.�~3��!����`<:��0+0������#i&V����`�� ��+V���> -����p -(y�!S%�.��30�.�7��*:���30� `���:���3��7� � ����3�:���3���a[� pC���. �aF��������N 3���� �pC�'a[� `��*(�� ��+ 3��. �3 -+0+E�����������

e3��

f �`<3�:. -���

`��. -������(e�OSV+

e�0��NL�<��+�30�

f# -�+0�

e�� -��+0�<+Z -� ����T.����3�� ���<`�:;��+0������#B&V���<���� -+ pC�<NL����� 3����

-+0+E������������3,��3,���7�.�0��+0����3���( 3���� a- -���(��7u*�.�0��+0+0�����x+x

� ;��� ����`�� # 3�����+"�7u� -�6�.�� (���������+E30�� �30��+ 30� M3!�C������3��<��+ ����� a[�7�0� �C�'&,�<��NL:�j30�*�� #� 3��*��

3��. �3j�. -+j3��"pC�%:�+0��(6&%��3��a lot of care

�gAB�63����%��30�.�7� �. -��(�#���3j+0���'&V+j30� M3j&,�X+0����:.�( ���<&%����(��:;�X�0��NL�<������`��"� M�� -���<3��7�,��(��> DNL���c3���� `�����+E30��:�`<3����% -��(Z`������R:;�Z&%��3���+E�����<3�������� pC�<303��7�>�^_� N �`<3 #,��:;�6������p.���� �. -+ �.��36� :�`�� 3�� (�� &V��3�� `<���.+G30��:�`<3�����+ #c�~36��+� �.�0��p ���� &V�~3��

3����!`<���*� +0���d -��3���`�+,��N ��:;�V� uF������+0+E����� `�L -+E+ #;3��. �3%��+ #.&%��3��3����"`������Z+0�<�d -��3���`�+,��N��C������3��<��+��

Page 177: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �'o�o

b,�.�(���N -:��3 `����*� +0�<�d -��3���`�+ ��+ 3��=+0���6� ~� `����*� a- -�:���+ &V����`��4��� `> -+0� ��NX�C������3��<�0+D���� -��+ -(�(;����+0+E��+�� �g:;3 ��N�30����#v �(���hi�7������3!`����*� +0���d -��3���`�+ ��+!(���+E���� �p.�� ��� &V����`�� NL��� �C������3��<�0+ ����33���� a- -�:��D��+ `����.����(�#n30� M3!��+ #n3���� -(�(;����+0+"��3"�0��NL�<��+!30� #np.:;3!���.+G3��> -(=30�.�D��p.rG�<`<3!pC�<�.���.( 3���� -(�(;����+0+X��+,`����.����(y� ����X����+E3� ��.`<� #;���

Expression f;

Expression e(1, f, f); // f + f&,�V(�� ����3 &c -��3

e3�� ���<NL�<� 3�� 3����B -(�(;����+E+ ��N

fpi��`> -:�+0�V3�����+j���6�.�����+v3��. �3

e` �. -������+ -+ +0�����

-+f`��. -������+��D^_��+E3��� -(�#y&,� &c -��3

e3��d����NL�<� 3�� �G������a- �3�� �`<���*� ��N

f&V����`�� (���+E`<����pC�<+ 3����

+� -��� �7uF������+E+0����� -+f

e ��� 3�����+ `> -+0��# 30�.��+G�F� pC�����`Da� ��0�L �p.��xg"p.:;3 &V����`�� � �+ Z(.�~hi�<���<��3

-(�(;����+0+ �������������0�[�v{*:�`�� �G���> -�� `����*� ����+0��~a[��+ 3����%3�������3 ����3� -����������<��3j��Nf ��.(

e&V����`��

��> �(63�� +0:�`��d+E30�� -�����%pi���. >a*�����>�� ;���030:.�. �30���� #*5XW WU�����'aF��(.�<+ "����`��. -����+0��3�� �'a[�<�0&X����3��c3����(���N -:��3c����� pC�<� � &V��+E�B`����*�+0���d ���3���`<+��

Reference copy constructor. ;���j R`<L -+0+�� �� � � #[ %����NL�7������`��%`<���*� `�����+E30�0:.`73����2��+ B`�����+E30��:�`��

3����X��N 3���� NL�����

� � � � ��� � � � �>e � �� � � �sg � ���~� �

b,�.�d`������ `�����+E30��:�`<3����D��+ `> �����(�# &V�������<a[�7�6 -� ��p rs��`73 ��NX3k�*�C� � �� � ���+ ������3��L ��� � ��(=N������ -� ��p rs��`73 `�����a[�<�E3���p.�� 3�� � �� � �'� ^_Nc��� `����*� `�����+E3E��:�`<3���� ��+ (���`�� �����(�# -� �/89(+*P�"�>��� ��!>(0D��!$#0����= : � �<!$= ��+,�����Ma*��(���(Z �:�30���d �3���`> ����;z[��3c`����.���<+X����� pC�<���_&V��+0���5,����+0��(.�7������� 3���� :�+0:. - `������x+0���d -��3���`�+ #"3���� � ��� -���<3��<� ��ND3���� `����*�x`�����+E30�0:.`73���� ��+

����3 +0:;���C��+0�<( 3���pC�6`��. -������(y�$�g:;3!3����6 MpC�Ma[� `����*�=`�����+E30��:�`<3����"� -+0+0��+!��3�+ M����:�������3 p*� �����NL�7������`�� # &V����`�� ����(���`> �3��<+!��3�+!����3��<��3������ 30� ` �. -��������3�� �%��(��<� �������d -2`����0`�:���+E3� -��`���+ #�&,�&,��:��( +0���6�.�� � �+0+ 3����d �����:�������3 p�� � a� -�:.�d����+E30�> -(y� �g:;3 ��� ����(��<� 3�� � -+0+D -�z �����:�������3p*� �_a- -�:�� #F&,� ������(�3����R`������ +E���d -��30��`�+ 3�� pC�R(��<T.�.�<( &V����`�� ��+,�7u� -`73���6&%� M3c30�.�R`������`���� �+E30�0:.`73���� ��+ +0:;���C��+0�<(d30�D(��;� ^_�����(��<� 3�� ���<+0���a[�V3�����+g3k���C�V��NC������p.�����+ #[3����V/[�<�*&,���0(

const�. -+,pC�����Z����30����(�:.`<��(Z���Z5XW W �

4.2.4 The const qualifierb,�.�

const�*:. -���T.�<�%��+B:�+0��( 3��d -������3� �3�� e �*:. -���N�� gX 3k���C���Rb,�.��+ �*:. -��~T `� �3��������0��+0:��3�+V���

���<&)3k�*�C� 3��. �3c��+c�0��NL�<�0���<( 30�6 -+% �h!$#0�>�VH � :+,5*P� { �hB ��D)(I� ��� #�NL���V+0�����03 # �h!$#0�>����D)(I� � AVp.rG�<`<3�+��Nc`�����+E3 3s���C�d ����d`> �����( ��!$#0���Y!�S � ��� �V� � 5,����+E3 ��p.rs��`<3�+ M��� :4#I82!LB.� { ,cS)* � #v3��. �3 ��+ #v3������~�a- -�:��"`� -���.��3,pC�! -�3��7����(y�

;��� -�Fe_:�� �*:. -���T.��(Ngi3k���C� �#M30�.�23k�*�C�j`�����+E3 � ��:. -���T.��($� ��+�(�������3��<( p*�"����3����<� ����C����(���������c�.�0�<�C����(������D30�.�R/[�<��&,����(

const3�� �g�

const�

�const

;���%� u� -�6�.�� #�3����"(���`�� ��� �3������ +E3� �3���������3

Page 178: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�'o�# �_� ��� ����� �q � �+� �

const int i = 0;(��<T.����+

i3��"pC�X��N 3k�*�C�c`�����+E3 � �*:. -��~T �<(

int&V��30� a- -�:��

0�vS�3k�*�i�%`�����+E3 � �*:. -��~T �<( �4��+j��N�30���

+0���6�.����0��NL�<�0���<( 3��d �+const T

� ;���B D3s���C�const T

#.3����!3k�*�C�T��+X`> -����(Z3���� :4#�B ��=)*PD5�/#;@

��D)(I� �gS%�3�����:������� ��������`����.��%��3,(��*��+c����3X�d M303��<� &%���<3����<�X const

��:. -���T.�<�c ����C�� ���+ pC��NL���0����B �N�3��<�%30�.�!� ���� ��N 30�.�":��.(��<�0��F����� 3k�*�C� # NL���%3����"+� �/[� ��N��0�> -(. �p.�����3k�d�����!+E�.��:��( � � -`��!�~3`�����+0��+G3�����30���&V��30�.���� ���������� -� �

Initialization.bc���<�0����+ +0���_`> -����( � :+,5*P� { �h,5���"!$# ��!$#Ip���=)���J!$# N��0���

T30�

const T�4SV+

`�����+0� ��:�����`�� #. -�d��p rs��`73,��Nn3k�*�i�const T

`> ��pC�B���.�~3��L -�� � ��( N��0���\ -���6�Ea� -�:.�V&%����+0�V3k�*�C�B��+`�����a[�<�03���p.��B3��

T�

5,����+E3V��p rs��`<30+%�D:.+G3V -~&c >�*+XpC�"������3��L ��� � ��(y�j$%����`��!30�.�"NL�����'&V�����D(���`�L ��� �3������ ��> -(�+X30�� `����6�.����7�,�<�0�����>�

const int i; // error: uninitialized const object

Pointers to const objects.{*����`��! `�����+E3V��p rs��`<3%`> -������3Xpi� `�� ��.���<( #�3�����+X -�+0� �.���(.+c��N �~3%��+

-(�(;����+0+E��( ����(�������`<30���:�+0����� �C������30�<��+��

const int i = 0;

int* iptr = &i; // error: address of const object cannot be

// assigned to pointer to a non-const typeQB�*��+ 30�.��+ ���> -� 3��. �3 &,��`> ��z -(�(;����+E+D`<���.+G3 ��p rs��`<30+ (.�~����`<3�~� �������� c� # p :;3 �C������3��<�0+!3��`�����+E3"��p rs��`73�+R� :�+E3BpC� (���`�� �����( �+R�i������3��7��+B3��� �`�����+E3R3k�*�i��� ^_� 3����D��3����<� (�������`<30����� 30�.��+����+G30����`<30�����=(��*�<+!����3!�����(wv 6�C������3��<� 3��Z `�����+E3 3s���C� `� -� �����( 3���� -(�(��0��+0+!��N -� ��p.rG�<`<3��NB3���� :��.(��<�0��F������e_����3�`<���.+G3 � ��: ����T.��(Ng 3k�*�i���x^_����30�.�7��&,����(�+ #c30�.�7��� ��+d �*:. -���T.`> �3������`�����a[�<��+0�����zN������

T*3��

const T*� �g:;3 -�3�����:���� 3���� ��p.rs��`<3 ����NL�<�E����(43�� p*� 3���������������. -

�C������3��<�,��Nn3s���C�T*��+,���*(���T �p.�� #[��3,`� -���.��3,pC� ���*(���T.��(630���0��:.���3����R`�����a[�<�E3���(��C������3��<�c��N

3k�*�C�const T*

�g^_� 3����"NL�����M&%�����ciptr

��+X �C������30�<�,3��6 -����p rs��`<3c��N�3k���C�const int

const int i = 0;

const int* ciptr = &i; // OK

int j = 1;

ciptr = &j; // OK: conversion int* -> const int*

*ciptr = 2; // error: ciptr is pointer to const type

Const pointers.�=��`> ��w -�+0� `�����+E3 � �*:. -���N�� �C������3��<� 3k�*�i��+��4SV�z��p rs��`<3 ��NV`�����+E3�� �*:. -���T.��(

�C������3��<� 3s���C� ��+np������ !��"`> -���<( ��!$#0���I(;!$�/#0�<�>= � ^_� ����(��<� 30�V����(���`> �3��23��. �3�30�.�const

/[�<��&,����(pC������.��+X3���3���� �C������30�<�V�� �30�.�7�B3��. -� 3���3���� 3s���C� &V����`�� 3���� �C������3��<�V���<NL�<��+B3�� #i��3V� �+V3���pC��.L -`��<( -N�3��<�c3����

*+E�F� pC��_�

� � const

S `<���.+G36�C������3��<�6�~3�+0���N%��+ :������*(���T �p.���� ^_�w`�����3E�� -+E3 # 30�.� ��p rs��`736�C������3���(z3�� p�� `�����+E3�C������3��<� ��� ����(���T �p.���� b,�. �3X��+ #;:������+0+,3��. �3X��p rs��`<3c��+X -�+E� ��N `<���.+G3 � ��: ����T.��(d3s���C���

Page 179: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �'o�q

int i = 1;

int* const icptr = &i; // OK: conversion int* -> int* const

int* const jcptr; // error: const object uninitialized

*icptr = 2; // OK: only icptr is const , not *icptr

const int* const cicptr = &i;

// OK: conversion int* -> const int* const

cicpter = icptr; // error: cicpter is unmodifiable

*cicptr = 3; // error: * cicptr is unmodifiable

Const references. ���. -��� # 30�.�7���6 ��0� -�+0� `<���.+G3 � ��: ����T.��( ����NL�<���<�.`<� 3k�*�C��+ #np�������!.� ���<NL�<�0����(

3�� -+ �h!$#0�>� =>�/K��>=>��# ��� ��D)(I� � �

const���

SV� ��p.rs��`<3 ��N `�����+E3!����NL�<���<�.`<�d3k���C�6��+"��N�3���� `> -����( ��!$#0���f=���K��>=��># ��� � S|`�����+E3 ���<NL�<������`���D:.+G32 -�&c ��F+ pC�c������3��� -�� � �<(n�ySw`�����+E3 ����NL�7������`��%��N�3k�*�C� const � & �d �� pC�,������3��L ��� � ��(!N������t -��0a- -�:��R&V����+0�R3s���C�!��+X`�����a[�<�03��~p ��R30� �g� b,����+c��+X���Z+E30������� `�����30�� -+E3c3�� ����� � `�����+E3c����NL�7������`���+&V����`�� �.�<��( 3�� pC� ���.�~3��L -�� � ��( N������ -� �a- -�:�����b,��� a- ����L Mp ���+

ciref ��.(

cfref��� 3����

NL�����'&V���.� � u� -�6�.�� ���� ��N�`<���.+G3%����NL�7������`��!3k�*�i���

double d = 1.0;

int& iref = d; // error: type mismatch

float& fref = 1.0f; // error: initialization from rvalue

const int& ciref = d; // OK: conversion double -> int

const float& cfref = 1.0f; // OK: initialization from rvalue

Const member functions.^_������3��7����+E3����.� �*:���+E30����� �����+0��+c����3����!`<����3��7u*3V��N `�����+E3V��p.rs��`<3�+X��N

`�L �+0+ 3k�*�C� �DS ����� pC�<�"NL:���`<3������ �d ��=�C��+E+0��p.�� ���*(���N�� 3�������p rs��`<3 NL��� &V����`�� ��3 ��+ `� -����(0z&V�. �3,�. ����C�<�.+,��Nn+0:�`�� ����� pC�<� NL:���`<3��������+,`> -����(NL���V `�����+E3c��p.rG�<`<3 �ZSV+ �[��:��. �a[�"+E������7u*�C�<�����<�.`<� &V��30� 3����d5cW"WO+0���d ���3���`<+ p��=���'& # �[��: �d �� ������p �p.�� ��:���+0+!3��. �3!+0:�`�� `> -�&,��:��( �0��+0:��3c���Z:���(��<T.�.�<(�pC���. �aF��������g:;3c3����"+E��3�:. �3������d��+c�D:.`��pC�<303��7�>�bc��� `<���6� ����<�c(��*��+V����3V -���'&U3���`> -�� D�����Dpi�<�cNL:.��`<30����� ��N `�����+E3%��p rs��`<3%3��. �3%��+V����3

�7u*� ���`���3�~���*:. -���T.��(6 -+ �h!$#0�>� 82�>8GS>�>=�K�:N# � ���J!$# # 3��. �3 ��+ #F !����� pC�<�2NL:���`<3������6&%����`����d >�pC��`> �����( NL���D`�����+E3D��p rs��`73�+�� SO����� pC�<� NL:���`<3������ `> �� pC��`<���.+G3 � ��: ����T.��( p*� �.L -`<������3����/[�<��&,����(

const������3�+g(.�<`�L ��� M3������6(������<`<3��� -N�3��<� 30�.�%`����+0�����!p��� �`��V��NC3����VNL�����d -�� ��� -���73��<�

���+G3>� ;��� �7u; -�6�.�� #���� 30�.�c`�L �+0+

Rational(���+0`<:.+E+0��(6��� 3����X������`��<(.���.�"+0��`<30����� 3����<���% ����c����� �

pC�<�!NL:��.`73�������+int n()

-��(int d()

&%����`��=���<3�:;��� 3���� �*:����<�� �30���! ��.( (������������. �30��� #i�����+E�C�<`<3���a[��~� #���N 3���� �� �3������. - �*:�� pC�<�>�db,����+0������� pC�<� NL:���`<3�������+"(.���.��3!`�� ��.��� 3���� ��p.rG�<`<3NL���V&%�.��` �Z30�.�7� ���� `� -����(y�cb,�.�7�Z`> -� +� �NL�����pi� `> -����( NL���B`�����+E3B��p.rs��`<3�+%��N 3k���C�

Rational -��(Z+0����:��(�#F3���:.+ #�pi�"(���`�� �����( �+X`�����+E3X����� pC�<�,NL:���`<3�������+��

class Rational {

...

Page 180: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>#�] �_� ��� ����� �q � �+� �

int n() const; // POST: return value is the numerator n

int d() const; // POST: return value is the denominator d

...

};

ABNX`���:;��+E� #g Z`<���.+G3 �����Dpi�<� NL:���`<3������ �d �� ��+0� pC��`> -����( NL���D Z����� �_`�����+E3 ��p.rG�<`<3>� e b,�.��+�d ���pC� `�����+0��(��<����(Z ��: ����T.`> �3������`<����a[�<��+E�����y� gSV����3����<�!&c �� 3�� 30�.����/ �pi��:�3 3���� ���<�DpC�7�"NL:���`<3������ `�����+E3 ��:. -���T.�<� ��+ 3��. �3!�~3"pC�<�������+

3��63���� ���6�.���`���3this

� ��� ����<3��<�X&V����`�� ��+%������+0�<��3R��� �<a[�<�E� �����Dpi�<�%NL:���`<3������n�V^_N 30�.�this� ��� -���73��<� &,��:��( pi� ������+E����3%�7uF�.���`<��3��� #����.� `���:��(�&X����3���#FNL���V����+E3� -��`�� #

class Rational {

...

int n(const Rational * const this);

int d(const Rational * const this);

Rational & operator *= ( const Rational * const this , Rational s);

...

};

�g:;3 �+"3����this

� ��� -���73��<� ��+ (.�7T ����( ���6� ���`���3�~�������� #C3����<��� �. -+"3��pC�6 ��.��30�.�7�"�.L -`<�D3���.:;3"�~3�+V�C��3�����3��L -

const�*:. -���T.�<���"SVN�30�<�R3����DNL���0�d -�� ��� -���73��<�R���+G3B��+ 6���> -+0���. �p.�� �.L �`�� #

+0�D3�����+X��+,&%�. �3,�C�����.��" -��������(����n�

Function parameters.� � (��<a[������i��( ��:��R����3��<�0��+E3B��� `�����+E3�� �*:. -���T.`> �3������ &V����� (���+0������������

`�������`�����+E30��:�`<30��� NL��� 3����V�7u*�.�0��+0+0�����d30���<�B`�L -+0+<� ^_�3�����+j`> -+0��#F&,�V�. >a[�R "NL:.��`<30����� �����:�������3&V����+0�Ba- -�:��B+0����:��(d�����d -����:���`��. -������( p.:;3 &V����`��`> -������3 pC�B� �+0+0��(p*� � a� ��:����2��������V30�.��++0��30: M3������ �d �� +0����� �*:���30�� uF30�� �����(����. ��0� �3 T���+E3 +0������3 # +0������� �� +0`<���. �������+ �*`<`�:;�6 -`73�:. -����� �30�.�7�%N���� �*:�����30��[�bc���c���> -+0������+j3��. �32� -+0+0�����! �����:�������30+ p�� � a� -�:.�X��+j -���7uF�i����+0��a[�%���i�<�� �3������ ��N 30�.�c��p.rG�<`<3

3�� pC�Z� -+E+0��(���+6L ��0����� K M�� -���<3��7��+6��NRNL:��.(. -���<��3� -,3k�*�C� �. �a[� +0�d -�c`<���.+G3� -��3d+E� � � -��(3����<� `> -� pi� `����.���<( N -+E3>� �g:;3!��N23����D� ��� -���<3��<� ��+ # NL���!����+E3� -��`�� #n -�=�7uF������+E+0����� 30���<� &V�~3��3�����:�+� -��(�+%��Nv���*(���+c3������ ��3X��+V �� �7uF�C�<�.+E��a[� ���C�<�� �3�������30�6`<���> M3�� `<���*� ��Nv��3>� ;���R D+0�d -����6���<(.��:.� �_+0� � ��NL:���`<3������4`����*�*����� +0:�`��w �����:�������3�+ �d �� -`<30: ���� (��������. �3��63������:���3�������C�<�0NL�����d -��`���� ^_�+0:�`��� !`� -+0� #F� -+0+E����� 3����B�7uF������+E+0������30�����B� ��� ����<3��<�jp*� � ����NL�<�0����`��"��+ � :�`���������R� � `�������3XpC�<`> -:�+0� ���.~��3����! -(�(;����+E+ v�&V����`�����+X��N +0�d -�i`<���.+G3� -��3X+0� � �'v �. -+ 3�� `����.���<(n�b,�.�7����NL����� #�&,� � �a[� 3����"NL�����M&%����� ��:���"��Nn3��*:�� pn�

Function parameter passing rule of thumb:K �+0+V NL:��.`73�������� ��� ����<3��<� p�� �_a- -�:�� ��������N���30+c+E� � �!��+,�0��:.�������30�.� +� -��� -+c3����"+E� � � ��Nv ���������0�d -(�(;����+E+��

^_�z� ��030��`�:�L �� # NL:���(. -������3� - 3k�*�C��+D`> -� pC��+� �NL���� � -+0+0��(4p�� � a� -�:.�d&V�������<a[�7� 3����<� +0����:��(�����d ���� :��.`��. -������( p*� 3���� NL:���`<3������y� S%��� ��� ����<3��<��+ &V����`�� N ��F����3v����3��B3����, �pC�'a[� `> �3��������E�+0����:��( pi� � -+0+E��(Zp*�Ge_`�����+E3 g ���<NL�<������`�� NL���%� �6`<������`<����> -+0����+��

Page 181: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>#;�

Overloading.5 ����+E3 �*:. -���T.`> �3�������+R -�+0� �.L ��= ������ ���=3����6`<����3��7u*3 ��N �'a[�<����[ �(.���.�;� ����

NL:���`<3������Z� ��� ����<3��<�c&V����+0�Fe :.� ��: ����T.��(Ngg3s���C�T��+%�.�<��3����<�B �C������3��<�%3k���C� �����R D�0��NL�<������`��

3k�*�C��# 3���� 3k&,��3k�*�C��+T ��.(

const T ���� `�����+0��(��<����( 3����6+0 -�����bc��� �0�> -+0����������pC�<�.���.( ��+

3��. �3 3����B� ��� -���73��<� ��+ � -+0+E��(�p*� �_a- -�:�� -��(�#*3����<����NL���0� #;�����d -����+ :���`��. -������( ���<�[ ���(����+0+,��N �C��3��<��3��L �.`<���.+G3 � ��: ����T.`> �3������n� b,�*:�+ #*NL��� ����+E3� -��`�� #[3����%NL�����M&%�����"`<�*(��%��+j�����<�[ -FpC��`> �:.+E�%3����NL:���`<3������

foo(int)��+,(.�7T ����(Z3k&%��`����

void foo(int i) { ...}

void foo(const int i) { ...} // error: redefinition of foo(int)

AR��3����X��3����<�g�. -��(�#���N 3����X3k���C�%��NC NL:��.`73������ � ��� ����<3��<�2��+g R���<NL�<������`��V3k�*�i�X3�������`�����+E3���*:. -���T.`> �3������R�d �/[�<+ ,(���hi�7������`����� ;��� �7u� ��6� �� #>3����23k&,�%NL:���`<3������.+n+0���'&V�!pC�<��M& M���j(���+G3�����`<3>�5 ���.+G3 � ��: ����T.`> �3������.+g ����B`�����+0��(.�7����(Z �+c`<����a[�<��+E����� &%�.�<� 3����VpC��+G3X�d M3�`�� ��+ (��<30�<����������(y� ^_N��� ��: ����T.`> �3������`<����a[�<��+E�����Z��+c����`���+0+0 ��0� #;3����!NL:���`<3������ ��+X pC�7303��<�X�d �3�`��y�

void foo(int& i) { ...}

void foo(const int& i) { ...} // OK: distinct types

...

int a;

foo(a); // calls foo(int&)

foo (2); // calls foo(const int&)

b,�.� +� -���B��:���<+% -�+0�6 ����.���3��D����� pC�<�,NL:���`<3�������+��

class T {

public:

T(int);

void bar();

void bar() const;

};

...

T t;

const T tc = 1;

t.bar(); // calls void bar()

tc.bar(); // calls void bar() const

Const correctness. ;�����'&V����� 3������ ��� -���<30�<� � -+E+0�����=��:���Z��NV30�*:��Dp 30� M3 &c -+6(���+E`�:�+0+0��(

�pC�'a[�R�d ��d��> -(d3�� � ������R�*:�� pC�<�,��N�NL:���`<3������� ��� ����<3��<��+ � -+E+0��(�p�� �_�0��NL�<������`��"&V����`��� M�������32` �. -������(Dp*� 3����,NL:��.`73������y� bc����+0� � ��� ����<3��<��+v+E�.��:��(DpC�,`�����+E3 � �*:. -���T.��(�#-30� M3j��+ #�� �+0+0��( -+c`�����+E3c����NL�<���<�.`<��+�� b,���!`�����+0��+G3�����3X:�+0� ��N�3���� /[�7�*&,����(

const3�� �*:. -���N��

� :������*(���T.��(�����NL�7������`��!� ��� ����<3��<��+,��N NL:.��`<30������+% -��(

� `�� -+0+c�����Dpi�<�,NL:��.`73�������+ &V����`��Z(�� ����3c���*(���N��630�.� ��p.rG�<`<3X30�.�7�Z ��0�"`> �����( NL���

���� ���������� ��H��+c���<NL�<�0����(Z30�6 -+ ��!$#0�>�s�h!$= =>���>��# � �>� �

Page 182: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�># � �_� ��� ����� �q � �+� �

bc��� :.+E����Nconst

��+D:�+0:. -��� � -+0+D��� N -��c+E��3�:. �3������y� ^_N%�[��:z:.+E�const

p :;3D(�� ����3:�+0�B��3g`�����+0��+E3��<��3��� #[3����V`����6�.����<� &V����`�����+E3� -��3�~� `����6�.L ����6 �pi��:�3g����`�����+0��+E30����`�����+��2{*� #�&V���+0����:��( �[��: :�+0� ��3X �3% -� �

�����+G3"��Ng -� # 3����D`<���6� ����<�V��+R�[��:;� N������<�.(y�!K ����p.��<��+V&V����`��= M��� (.��+0`��'a[�<����( M3R`����6�.������3������j ����g� :�`�� �������2�> -+0��~�"���<+0���a[��( 3��. -� ������p.�����+y&V����`�� �C��� :;� �3 ��:���3������2������[� �X+0:. -���3���� `����6�.����<�,�<a[�<� (.�~����`<3�+,�[��:�3��D3���� ������p.��<�d �3���`V������ ��� �[��:;�%`<�*(����{*��`�����(�# 3���� +0�~3�:. �3������ �.�7���6��+"+0�����<&V�. �3"+0������L ��B3���30�.� +E�C��`<��T.`> �3������=��N NL:.��`<30������+��d^ 3

��+ ���6�C���03� ���3 3�� (��<T.����3�����pC�<� �a*�����6��NR NL:.��`<30����� p*�4(���`�:�������3����.� ��3�+D�������z -��(4�C��+E3��`�����(���3�������+�� �g:;3 NL���"3���� �.:;�0�C��+0� ��N 3���+E3����.�� d���������� -� �~3!��+"� :�`��=pC�7303��<�"3������Z����� +E3��<�NL:;�03����<� -��(w`�����`�/� -��( ����+0:;���Z30�.��+E� `�����(.�~3�������+ &%�.�7���<a[�<�d�> �+0���� �C��+0+0��p.���# NL���d����+E3� -��`�� #:�+0�����d -+0+E�<�03�������+�� �j� �*:. -���N��F����� -� ��p rs��`<3B -+

const#.�[��: �. �a[� 3���� `����6�.����7�V �3%�[��:��R����~�

3�� ����+0:;���B3��. �3 30�.��+ ��p rs��`<3 ��+ ����(�����(�.��3,����(���T.��(y� b�� ���������`73 +0:�`��Z !�C�'&,�<��NL:�i3����� &,��:��(pC�R�� �3����<�X+E3�:;�.��(y�

����. -�~� #�&V�~3�� ����+E�C�<`<3 3��R������3��L -�� � �3������"`�����+E3v�0��NL�<������`��<+ ���� �����0� `�����a[�<�.������3 3��R:�+0� 3��. -������ � `�����+E3 ����NL�<���<�.`<��+��wb,�.����> -+E���4��+ 30� M3 `�����+E3D����NL�<���<�.`<� `> -�zpC� ������3��L ��� � ��( N������ -��0a- -�:����2SV+X30�.� NL�����d -i� ��� -���<3��<�0+c��N�NL:.��`<30������+% ��0�"������30�L -�� � ��(dN������H30�.�<���%`� -�C� ��� -���<30�<��+ #������3��� -�� � M3������ �.L ��F+c -�����6�C���03� ���3 ������R&%�����Z`> -�������D DNL:���`<3������y�� ;���%� u� -�6�.�� #F DNL:���`<3������

void foo(const Expression& x) { ... }`> -� pC�%`> �����( -+

foo(1)pC��`> -:�+0�X��N 3����c���6�.���`���3�`�����a[�7��+0������+gN��0���

int3��

double -��(6N������

double3��

Expression��e b,��� � �303��<�,��+ (.�7T ����(p*��3����R`�����+E30�0:.`73����

Expression(double)� g

^_Nfoo

&c -+%(��<T.����(Z&%��3�� D�.��� �_`�����+E3%���<NL�<������`�� � ��� ����<3��<�X����+E3��> �( #;3���� `� -�foo(1)

&,��:��(N -�� pC��`> -:�+0�

1��+, -���0a- -�:��V&%�.��` �`> -������3 pC�B:�+0�<( 3�� ������3��� -�� � �c -���p.rG�<`<3,��NC����NL�<���<�.`<� 3k�*�i���

Copy constructor.�%+0����� 3����"/[�<��&,����(

const&,�"`> �� �.�'&xNL�����D:.� �3��B3����"`<���*� `�����+E30��:�`<3����

NL�����:;�d�7uF������+E+0�����w30����� `�L �+0+63����Z&c ��4&,� &c -��3��<(n�xb,���Z� M�� -���<3��7����+6� -+0+0�<(�p��w`�����+E3����NL�7������`��X&%����`�� `���> ����� ����(.��`> �3���+ 30� M3 ��3v�����d -���.+�:.��`��. -������(6 ��.(D3����,`����6�.����<� &%��������NL����`��3�����+��

class Expression {

...

Expression(const Expression& f); // POST: * this set to f.

...

};^_�U�������<�� - #BNL��� `�� -+0+ � �� � � #B `����*� `�����+E30�0:.`73����Z��+� `�����+E3E��:�`<3����Z��N!���.�=��N!3����

NL�����'&V���.� 3k&,� NL������+��

� � � � ��� � � � �>econst

� �� � � � g � ����� �� � � � ��� � � � �>e � �� � � �sg � ���~� �

SV�30�.��:���� 3����������73���`> -���!pC��30� a- ����L -��3�+v�d �� �<a[����`<�*�7uF��+E3�e_+0�<�c3����,� ��� -���� M� �D��� �'a[�<����[ -(������ �pC�'a[�)g�# ��� ����+E3 `> -+E��+ ������ ���.� ��N 3������ #n� ������� 3���� T���+G3!a- ����L -��3 e &V��3��=`�����+E3!���<NL�<������`��� ��� -���73��<�'g�#���+g:�+0��(y�2bc����+2��+j -�+0� 3����%`������ `<���.+G30��:�`<3����j&V����`��6��+j���6�.���`���30�� (.�7T ����(�#���N ���������N 30�.�<� ��+c����a[�����7uF�.���`<��3���[�

Page 183: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>#�8

4.2.5 Dynamic Storage Allocation� �R�. �a[�"���'&U(���`�L M����( 30�.�R`������d`�����+E30��:�`<30���XNL���,3����R�7u*�.�0��+0+0����� 30�����R`�L �+0+��2$%�'&,�<a[�<� #;&V�~3����:;� `�:;�0�0����3 /*���M&%���(���� ��3"��+"+E3����2����3 `���> �� ���'&|30�Z���6�.���������3V3�����+"`�����+E30��:�`<3����"&V��30�=3�����G30��:�� � `����*� +0�<�d -��3���`�+B&,� �. �a[� ��� ������(y� SV����� -(;� &%�����=(���+0`<:.+E+0�����Z ��0��3������<3���` 3k�*�C��+ &,�+� �& +0����� ���.`<����a[����������`�� ����`�:;�0����(4p��4�. �aF����� ���.~�z T;u;��(� -����:���3D��NV���<�����0� NL�����> -`����p.rG�<`<36��NV3�����+E��3k�*�C��+�z%���43�����+D`> -+E� =������~3���( a� ��:�� �� -������� �g:;36���<�0�Z���43�����`<����3��7u*3���N�7u*�.�0��+0+0�����Z3E������+%30�.��+c���<+E30����`73������ pi��`�������+c�<a[��� �������R+0�<a[�7����� � �"� �a[� 3��6`<���� �3�� D`����*� ��N �����a[��� �7uF������+E+0�����=30�0���'v�&V����`�� �d �� pC� �*:����'v�p.:;3"���.+E��(�� 3����

Expression��p.rs��`<3R&V����`��

3����6`�����+E3E��:�`<3���� ��+!`> -���<( NL��� 3����<������+!���.~� �`<���.+G3� -��3 -����:���3"��N ���������0� �a� -��L �p.���e_NL���3���� NL��:��%����� pC�<�

op#val

#left

#� ��.(right

g7�gABp�aF����:�+0~� #F3�����+,`> -������3X&,���0/ ��g:;3 &V��� +0����:.�( &,�����<+0�<�0a[� �T;u;��( -����:���3!��NX���<�����0� NL��� ���� �7u*������+0+0����� 30�0���'�O^_+

��3 �d -��(. �3����0��3��. �3RpC��NL�����D�7u;�<`�:;3������ ��3 ��+B/*�.�'&V�=NL��� -��� �.�0������ -�l���M&��D:�` �=���������0�Z�~3&V���,:.+E�'� c� # � ����{*��`<30�����w8F� � ��� ���<`�:;��+0�����4&,�Z�. �a[� -~���> -(;� +0�����w3��. �3 30�.��+ ��+ �.��3 3����`> -+E� �Z3����Z(��<��3�� ��NR �0��`�:;��+0����� e_ -��(43����<����NL�����Z30�.� +0� � ����NV3�����`> -�X+E3� -`�/ g ��+ ��� �������<�� �����3X/*���M&%�ZpC��NL�����"�7u;��`<:�30�����y� {*����3c��+X`�����`�����a- �p.��R3��. �3X30�.�7���!�7uF��+E3�+% -����3����<�c�����������Z����3����`����6�.:;3��<� y +%���������E�5v ���/[�B3���� `> ���+E3� -`�/5v N������ &%�.��` � �5cW Wt���������� -� `> -� (��*�. -����`> -������ ��:���+E3,���������0�[��^_��(.�<��(30�.��+g��+g30�.�%`> -+0���jb,�.�%� ����%��Ni3�����+ ���<�����0� ��������������+g`> -���<( �;�h, (��� K�=>�h�F�>�<!$=�,$@�� �

New expression.$%�M& (�� &,�Z��� ��:.�<+E3d���������0� N������ 30�.���.�� �� � b,�.��+6��+6(������Z���� # �>1

�'&)(0=�� �>���"!$# #�&%����`��Z�. -+c30�.� NL�����'&V���.� a- ����� -��3�+<�

new�

new�me0���~� g

^_� pC��30�=`> -+E��+ #C3����D�0��+0:��3R��Nj30�.� ���<&��7u*������+0+0�����=��+ -� �0a� ��:��D��N 3k�*�C� ���>� ^ 3�+Ra� ��:�� ��+3���� -(�(;����+0+c��N� �����p.rG�<`<3,��N 3k�*�i� ��&%�.��` ��. -+ pC������ -����`> �3��<(���3����R�.�� ��n�jb,����+,��p rs��`73,��+������3��� -�� � �<(Dp��6 !`� -��3�� ����30�.�7�g3����%(���N �:.~3 `�����+E30�0:.`73���� e T���+G3ga- ����L -��3'g�#����g3��"3����B ��������������L �3��`�����+E30�0:.`73���� �d �3�`�������� 3���� `> -� � ��� ����<3��<�V3k���C��+fe_+0��`<���.( a� M���L -��3'g7� ^_N � ��+ 6NL:��.(. -���<��3� -3k�*�C��#�30�.�RT���+E3ca� M���L -��3X��> �a[��+X3���� ��p rs��`73%:���������3��L ��� � ��(y�

;���V�7u; -�6�.�� #F3����!NL�����M&%����� (.�<`�L ��� M3�������+ ������3��L ��� � �%30�.� a� M���L �p.���+i -��(

j#�pC��3��Z��N 3s���C�

int*#v&%��3�� 3����d -(�(;����+0+ ��Nc -� ��p.rG�<`<3 ��N 3k�*�C�

int&V����+0�����������0� ��+ �0� �*:���+E30��( N��0���e3����

���> ��n�

int* i = new int; // *i is undefined

int* j = new int(6); // *j is 6

Delete expression.^_NC3����<�0� ��+ !&c ��63��D -����`> �3��X���������0�D���d3����B�.�� �� #*3����<���R -�+0� �. -+ 3�� pC�

&c ��D3�� (��> -���*`> M3��,��3 ��� ����(��<� 3�� �d M/[�X��32����:�+� Mp ��%NL��� ��3����<�j�.:��E�C��+0��+��2b,����+g��+j(����.�X:�+0����� B � * �>�<�6�'&)(0=�� �>���"!$# #�&%����`��Z�. -+c30�.� NL�����'&V���.� +G�F��3� MuC�

��� ��=������������ �!��� � � �# �5'7�� �� ����&���)9(3<�=�;� �����,��'�� �%�=��D� �� ����%9�����������F� ��� ���'�'�A,������)�=���(G

Page 184: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>#�? �_� ��� ����� �q � �+� �

delete�

&V���<�0� � ��+ �� �0a- -�:�����NX�i������3��7� 3k�*�C��&V����+0� -+E+0�*`��� �3���( ��p rs��`73D&c �+ ������3��L -�� � ��(=p�� Z�.�7&�7u*�.�0��+0+0�����y��SV+! -� �<h ��`<3 #�30�.� ���������0� ��Ng30�.��+!��p.rG�<`<3!��+!(��> -���*`> �30��(y� SV�30�<���. �3���a[�<�� #C��3"��+ -���M&,��(Z30� M3V3���� a� ��:�� ��N � ��+V3���� �*:����C������3��<�>zi��� 3�����+V`> �+0� 3���� (.�<��<3�� �7u*������+0+0����� �. -+B����<h ��`<3>�gbc���R3s���C� ��Nv D(�����<3�� �7uF������+E+0�����Z��+

void�

;��� �7u� ��6� �� #C3���� (���`�L M�� �3������ pC����'&t������3��L ��� � ��+R da� M���L �p.��jN������ 30�.� ���> ��n�dbc��� NL����

��'&V����� +E3� M3���������3X(��> ����*`� �3���+ 3���� ���������0��:�+0���.� (.�<��<3�� �7uF�����<+0+0�����y�

int* j = new int(6);

delete j;

Lifetime and storage duration.S%����p.rG�<`<3,3��. �3,��+,������3��L ��� � ��( p*� ���<&)�7uF�����<+0+0����� ��+,+� -��(d3��

�. �a[� B.Dq#�,.8Y�J�f�>�<!$=�,$@�� B.:N=�,5���J!$# � ^ 3�+ ���NL�<30�����X� uF3�����(�+ N������ 3����%�i������3 &%���<���B��3�+g���������0���+X -����`> �3��<( :�+0�����

new:���3���i30�.� �C������3 &V���<���"��3c��+,(.���k -���*`> �30��(�:�+0�����

delete�

SV�3�����:���� -�����������0� ����*`� �3���(�p�� ���������� �� ��+X(.���k -���*`> �30��(Z&V����� 3����!���������� �� 3��<��������. �3��<+ #���3!��+!a[�<�E� p -( �.�� -`<3���`<� 3��Z����~� ��� 3�����+!N �`<3 NL��� (����k ����*`� �3�������(;�*� �����` +G3����� -�����^_NB �.�0������ -� (.����+ ����3D�������C�<��~� (��> ����*`� �3�� -�,���������0�=&V����`��4��3 -����`> �3��<+D�~3 ��+D+� -��(z3���. �a[� 8��>82!$= D2* �',5Z �!{*:.`�� ��> �/*+R ���� ��N�3���� 6+0����� ��Nvp �( `���(������;�Rbc���<� ��0� � M�03���`�:�L M����������p.����d �30��`B���Z���������� -��+ &%�.��` �Z�0:.� NL���B ������ 30����� #;NL���B����+E3� -��`�� #.���C�<�� �30����� +E�*+E3���� ����: �3�������+jpC��`> -:�+0�V30�.�7�6�d ��6�<a[�<��3�:. -�~� �7uF�. -:�+E3 3����R �a� ���L �p.��c+E3����� ������2bc���<���<NL����� #F&,�V�. �a[�V3����NL�����'&V���.� ��:���(�����������

Dynamic Storage Guideline:���<& -��(�(�����73��! ��&c ��F+c`������R��� � -���0+<�

4.2.6 Expression tree construction� �g ����2T �. -���V���> �(�� 3��X���6�.���������3i3����g`�����+E3E��:�`<3�����+ NL��� ��:;��� uF������+0+E����� 30�����j`�L -+E+�� SV`<30: ���� #3����RT.�0+E3%�����R&,�"`<��:.�(Z�. >a[� (������ `���:;�.��"��N�+0:;p +E��`<3�������+X -��� -����> �(��[�

Expression:: Expression() : op (???) ...

$%��� #�&V�. �3 -�[ -����&c -+ 3����B���C�7�� �3���� `<�*(��BNL���X !`�����+E3� -��3 �������d ��0� �7u*�.�0��+0+0����� ��� �+ ��30���

−1�Zb,����+0�V`���(���+ ��0�V p.��3j����+0+G� ��.(��. ��0( 3��!���<�����Dpi�<� #[ ����<�+y 3g3����<�;�Z^_��+0:�`��d "`> -+E�%��3j��+

���*��( �.�� -`<3���`<� 3��R(.�7T ���, VNL�<&w�. -���<+�&V����`��D ����,������� ��������������`�#M3��. �3 ��+ #��> -+E���<�v3��B���> �( -��(3�� ���<�����Dpi�<�>� SV+ 30�.�<+0�B`��*(���+, M���VT;u;��( -��( ����B����3 +0:;���C��+0�<(3�� `��. -�����B(�:;������� �7uF��`�:;3��������NB3��������������� -� #g`�����+E3�a� M���L �p.���+ ����Z3������������i�<�63�����_���=� (��<T.�.� 3���� NL�����'&V�����=����3������7�`�����+E3� ���3�+c�����. -���<+E� -`�� +0`����C� +0�����<&%�.�7���BpC��NL����� 3����"(��<T.����3��������N 30�.�"`�L -+E+

Expression�

// Codes for different types of expressions

const int VAR = -1; // symbolic variable x

const int VAL = 0; // constant value

Page 185: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>#[I

const int ADD = 1; // binary addition

const int SUB = 2; // binary subtraction

const int MUL = 3; // binary multiplication

const int DIV = 4; // binary division

const int UMI = 5; // unary minus

b,�.� `�����`<���73�� a- -�:���+��N"30�.�<+0�=`�����+E3� -��3�+d(��z����3�d �3030�<� #X -+ ����.� -+d3����<� ���� �D:�30: ����(���+E3����.`73>�

Primary expressions.$%�<��� `������B3����RT.�0+E3X3k&,�

Expression`<���.+G30��:�`<3�����+<�

Expression:: Expression() : op(VAR), val(0), left(0), right (0) {}

Expression:: Expression(double v)

: op(VAL), val(v), left(0), right(0)

{}

Copy constructor.��:�` � �����0�D����3��<�0��+E3������ ��+ 30�.� `����*� `�����+E30�0:.`73����!&%�.��+E� (���`�� ��� �3������ -��

���> �(��d3�����/:.+c+0� ������D3�� ���<3X��3,��������3��

Expression:: Expression(const Expression& f)

: op(f.op), val(f.val), left(0), right(0)

{

if (f.left != 0) left = new Expression(*(f.left));

if (f.right != 0) right = new Expression(*(f.right));

}

b,�.�7��� ��0�! NL�<&)3���������+ 3�� ����3�� ���<����� �����+G3g��N -� #-30�.�c`�����+E30�0:.`73����g��+2���6� ���������30��( ����`�:;��+E��a[���� #[+0���6�.��!NL�����'&V�����V3���� ����`<:��0+0��a[�

(��<T.����3������6��Ny�7u*������+0+0�����.+<� ��~��+E3 3����V(. �3� "�����Dpi�<��+g��NC3����V������3 a[�<�030�7u ����B`<��� ����(�#�3������d3����3k&,� `������(;������ ����R�����*`��<+0+0��(Z���<`�:;��+0��a[��~�[�{*��`�����(�#C3���� �0��`�:;��+0��a[� `������ ��+B����3R(����.� p�� `����*�*�����d30�.� �C������3��<�0+ # p.:;3Bp*� `������F������3����

`�����3�����3�� ���� 30�.��+ # 3����left

-��(right

�C������3��<��+ ��N 3������7u*������+0+0�����f3��ZpC��`<��� ����( �. �a[�

3��6pC� (��<�0��NL�<������`��<(n�"$%�'&,�<a[�<� # pC��NL����� (��<���<NL�<������`������d3������ &,� pC�7303��<�B�d M/[� +0:;��� 3��. �3V30�.�7� ���� ����3 �*:�� �C������3��<��+<�6� � �����<( 30�Z(���+E3�������:���+0� 3�����+ `> -+0� &%����`�� ��+ -�+0� 3����Dp �+0�6`> -+E�6NL���3���� ���<`�:;��+0����� &V���<��� 3�����`����*� ������`���+0+ �7a[����3�:. -��� 30�<�������. �3��<+���b,����+ ��+!(.�����6:�+0���.� �� ��N��+E3� M3���������3>� c��3��D30� M3

left -��(

right ����D+0�<3!30� � �<�0� ��� 3���� ������3��L -�� � �<� zC������`���# ����3��������

�������R�. -+,3�� pC� (������"��� `> -+0� 3��. �3f.left

���f.right

��0� � �<�0�;�bc�����0( #.���Z���0(.�7�V3�� `<���*��30�.�"���N�3V -��(Z��������3%+0:;p � �7u*�.�0��+0+0������+ v ��N�������+0����3"v ���<& ��p.rG�<`<3

��N 3k�*�C�Expression

��+ -���*`> �30��( N�������3���� ���> �� :�+0�����Z ���<& �7u*������+0+E�����y� b,����+ ��p rs��`<3!��+������3��� -�� � �<( :.+E����� 3����c`����*� `�����+E30�0:.`73���� 3��. �3g��+ �0��`�:;��+0��a[�<��D`> -���<( NL���23����c������32��N 3����X+E:�p�30�0���3�� pC�X`����.����(y�2bc���V���<& �7u*�.�0��+0+0�����d���<30:��0�.+ �C������3��<�j3�� 3�����+g��p.rs��`<3j&V����`�����+g3������ -+E+0��������(3��D3����! ��������������L M3��B(. �3� �����Dpi�<�

left���

right��N ��:;�X��p rs��`<3,3��DpC� ������3��L -�� � ��(y�

S 3 3�����+"�C������3 ��3"������p �p.�� +0���'&V+!&%���<3����<� �[��: � �a[��NL:���� :���(.�7��+E3����*( 3�����`�����`��<��3 ��N����`<:��0+0�����y�g^_Nn�[��: ���� :��.+E:��0� #����6 -��( �0�> -( ����`�� �������B3��;����:���� {*��`<30����� 8F� �*�

Page 186: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>#�P �_� ��� ����� �q � �+� �

Composite expressions.^ 3R�����d �����+%3�����6�.���������3%3���� 3k&,� `�����+E3E��:�`<3�����+ NL��� `����6�C��+0��30� �7u �

������+0+E������+��2{*����`��c�7uF������+E+0������+g M���c�i��3�����30�L -���"L ��0���c��p.rs��`<3�+ &,�,`�� ��.���,3����,� M�� -���<3��7��+ 3��RpC�� -+0+0�<( -+R`�����+E3R����NL�7������`���+�� b,��� ���6�.���������3� �3������ +0���6�.�� `����.����+B3���� +0:;p � �7u*������+0+0�����.+ ����3��3���� `����0����+G�C����(.���.�D+0:;p�30������e_+ gc:�+0���.� 3���� `����*� `�����+E30��:�`<30���>�

Expression:: Expression(int o, const Expression& a)

: op(o), val(0), left(new Expression(a)), right(0)

{ assert(op == UMI ); }

Expression:: Expression(int o,

const Expression& a,

const Expression& b)

: op(o),

val(0),

left(new Expression(a)),

right(new Expression(b))

{

assert(op == ADD || op == SUB || op == MUL || op == DIV);

}

SV+,3���� �����<`�����(.�~3�������+c ���� �> -+E�3��D` ����`�/ # &,� :.+E� -+0+E�<�03�������+ 3�� ����NL����`��"30�.�<� �

4.2.7 Destructor������� ����30����(�:.`<����� (;�F�. -����` ���������0��d -�. -���<������3c:�+0�����

new -��(

delete&,� +E3� �3��<( �+B

��:���(���������c3��. �3 3�����+0�B3k&,�D -�&c ��F+g`������V����� -����+<� c�M& 3��. �3 &,�B�.:�3 +0�<a[�<�� �n���<& �7uF������+E+0������+����3��30�.� (���hi�<�0����3"`�����+E30��:�`<30����+ #y&V���<��� ����D3���� �d �30` �������d(�����<30� �7u*������+0+0�����.+�� 5 ��> ��0�� &,�������( &c �� 30� N����<�"3����!���<�����0�� -���*`> M3���(dp*�� -���7u*������+0+0�����Z30�������5,����+E3E��:�`<3�����+% ����!`� -����(� -:;3����d �3���`> -���D&V�������<a[�7�B -�Z� uF������+0+E�����Z30�����"��p rs��`73%��+c(��<T.����(y�

^ 3,+0���<��+ �� �3����<�,����`�����a[����������3c -��( �<�E����� �_���������V3�� �. -��(�`<�� -N�3 30�.�B�C��30����3��� -���D`����0�0��+E�C����(������(�����<30�"�7u*������+0+0�����Z����30� M�.�.���`> �3������d`���(����g^_��(�����(�#.5cW"WY�����'aF��(���+X � :�`��������0� `<����a[����������3����`��. -����+0� NL����3�����+ /F���.(w��NR`���� -�*:;�n�)^ 3�`�������+ ���wNL����� ��N +E�C��`��� -%����� pC�<� NL:��.`73������&V����`��wv ��� -�. -�������3��D`�����+E30�0:.`73�����+ v ��+c`> -����( B �>�>��= : � �<!$= ����.���� 3����<���D�d >��pC� �d ���� (���h �<������3"`<���.+G30��:�`<3�����+ NL���! d���~a[���=`�� -+0+ #C3����<���D��+R������ �����

(���+E30�0:.`73����>�jbc���<���<NL����� #���3c��+ rG:�+E30��T.��( 3��D+E�C�� �/ �pC��:;3 �V�;� (���+G30��:�`<3����X��N `�L -+E+��2bc���!�. -�����NF3���� (���+E3E��:�`<3���� `<���.+E��+E3�+ ��N� ,3����(��2+E�F� pC��`e

~gnNL�����M&,�<( p*�!30�.�j`�L -+E+ �. -����� bc��� (���+E3E��:�`<3����

�. -+,��� ��0��:.���<��3�+ ��.( ��� �0�<3�:;��� 3k���C�fe_����3,�<a[���void

g7�gb,���R(.�<+E30��:�`<3����c��N `�L -+0+ � �� � ������/F+ #F3����<�0��NL����� # -+cNL�����'&V+��

� � � � ����� � � � �>e g � �~��� �

b,�.�d(���+E3E��:�`<3���� ��+ `> -���<(z -:;3����d M3���`> -��� #n&%�������<a[�<�D3�������NL�63���������NX -�z��p.rs��`<3D����(�+�� ;�����p.rG�<`<3�+ &V��3�� -:;3����d �3���` +E3����� -���c(�:;�� �3������D3�����+2� M�.�i����+g �323����c����(���N 3����cp.���`�/D&%���<���X30�.�7� ����g(.�7T ����(�#�NL������p rs��`73�+�&V�~3�� +E3� M3���`2+E3����� -���g(.:;�� M3������!3�����+n�. ����C����+v �3 ���������� -�)3��<������� M3�������#

Page 187: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>#[o

-��( NL��� ��p rs��`<3 &%��3�� (;�F�. -����` +E3����� -����(�:��� �3������ 3�����+ �. ����C�<�.+ &%�����delete

��+ `> -���<( NL���3������ #F��������(��L �3���~�Dpi��NL�����"30�.� ���������0�6��+X(��> ����*`� �3���(y�^_N,�.� (���+G30��:�`<3���� ��+ �7uF�.���`���3��� (���`<L �����(�# 3����6`<���6� ����<�R�����Ma*��(���+ -� ���6�.���`���3R(���+E30�0:.`73����

&V����`�� �. -+R�.�d�<h ��`<3>�!S (.�<+E30��:�`<3���� `> ��.����3BpC� `�����+E3�� �*:. -���T.��(y� S%�3�����:���� �~3R��+V�C��+0+0�~p ��!3��`> -�g �(���+G30��:�`<3���� � uF�.���`��~3��� #C3�����+!��+!�� ����<��=�����<(.�<( ��.( +0����:��( pC� +E30����`<3���= �a[����(���( ��� ��:;�`�����3��7uF3��

Expression tree destruction.$%�'&\(��*��+ 3����d(���+E30��:�`<30��� NL��� ��:;� �7u*������+0+0�����z30�����`�L �+0+ ��*��/

���/[�>�Z^ 3%��+c+0:;�0������+E���������+0���6�.��-�

Expression::~ Expression()

{

delete left;

delete right;

}

� ���3 ����������3���{*����:��(��0y 3d3����<��� pC� +E����� /*����( ��N"�0��`�:;��+0����� -+ &,� �. -( ����3����=`������`�����+E30�0:.`73���� ��^_� N -`<3 # 3����<�0�6��+ �0��`�:;��+0�����0zirs:�+E3 ��3!��+ ����(�(���� ��� 3����6���6� ���`���3R`> ���+R3��Z3����(���+E30�0:.`73����>���� M3 �. ����C����+!&V����� 3����6(���+G30��:�`<3���� ��+!`> -����( NL��� 3���� �0�*��3 ��N, -� �7u*������+0+0����� 3E�����'��^ 3

`> -��+ (�����<3������ 3���� ���N�3� ��.(4�0������3 +0:;p �_�7uF�����<+0+0�����y��^_NB��������Nleft

���right

��+D3����Z�*:���C������3��<� #�3����R`����0����+G�C����(.���.� (�����<3��R�7uF�����<+0+0������. -+,�.� �<h ��`<3>��g:;3,��N #;+� �� #

left!=03������d3����

(�����<30� � uF������+0+E����� 30�0�������<��+ 3����R(���+E30�0:.`73����,NL���X30�.�B� uF������+0+E����� 30�0���*left

&%����`��left

���<NL�<��+3��;�"bc����+B(���+G30��:�`<3���� ��� 3�:;��� `> -��+%(.�<��<3�� ��� ��3�+B+0:;p � �7u*������+0+0�����.+B&%�.��` � 30���������<��+ ���>� b,�.�7����[��:Z�. �a[�"3����R����`�:;��+E����� �

4.2.8 Assignment X�'& 3����<���c��+2���.~� ���.�,T.�. -Fp.��32+E3����;����+0+0�����V�����[ M��(������ 3����c���������0�!�d -�. -����������3 -��(6`������+0���d ���3���`<+%��Nv��:;�B�7u*�.�0��+0+0����� 30���<� `�L -+E+��V^ 3B��+%3���� -+0+E������������3X���C�<�� M3����se

=g �Vb,�.��+V���C�<�� M3����

��+,a[�<�0�3�������3����`���������`<30��(Z3�� 3����"`�������`<���.+G30��:�`<3����>�g5 ���.+E��(��<�,3����!NL�����'&V���.� `<�*(����

Expression e = 1;

e = 3;

b,�.�DT���+E3"+E3� �3��<������3 ������3��� -�� � �<+ e -��(�#n30�.�7����NL����� #�`> -��+B3����D`����*� `�����+E30�0:.`73���� NL���"3���� `�� -+0+Expression

� ^_�D`<����30�� �+E3 #-3���� +0�<`�����(D+G3� �3������<��3 `� -��+n3����, -+0+0������������3 ���C�<�� �30��� NL���v3���� `�� -+0+Expression

�!QB:.� 3��d3���� +0������� �����3k���N230�.�<+0�D3k&,�d���C�<�� �3�������+ #C��3B&,��:��( pi�Da[�<�E� +E30�� -����� ��N3����<��. -(Z`����6�.��73������(���h �<������3%+E���d -��30��`�+��{*� N ��!&,� (���( ����3!�7u*�.���`���30�� (��<T.�.� -� -+0+E������������3 ���C�<�� �3���� NL���

Expression��S%+"3����

���6�.���`<��3��� (.�7T ����( -+E+0������������3X���C�<�� �3����V(�����+V����� pC�<� � &V��+E� `<���*� # &,�!`�:;�0������3���Z�. �a[� `���� ��.��<3��<��d(���hi�<�0����3X+0���d -��3���`�+,NL���%`����*� `�����+E30��:�`<30����� a[�<�0+0:�+B -+0+0�����.���<��3,���

Expression�gbc���

��p*a*����:�+ &c �� 3�� T;u 3�����+ ������p.��<� ��+ 3�� (.�7T ��� -� �7uF�.���`<��3 -+0+E������������3 ���i�<�� �3���� &%��3�� 3����+� -�����G30��:�� � `����*��+0���d -��3���`�+c -+c3����!`�������`<���.+G30��:�`<3����%(.��+0`�:�+0+0��( �pi�Ma[��� bc����+c`> -� -`73�:. -���pC�R�.���� -+0��( �+V �������<�� -y��:�����

Page 188: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>#�# �_� ��� ����� �q � �+� �

Copy semantics definition rule:���������<a[�<�%�[��:�(.�7T ���"����3����<�c`�������`�����+E3E��:�`<3����X���V -+E+0������������3,���i�<�� �3����cNL���V D`�� -+0+ #�[��:Z����+E3,������p �p.��d ��+0� &c ���3,3�� (��<T.���R3����"��3����<���

mn�73B:�+BNL�����'&x30�.��+%��:��� ��� `� -+0� ��Nv3����Expression

`<L -+0+��XSV�3�����:����Z`<���*� ������30�L -�� � �3������ -��( -+0+0������������3 ��0�+E������L �� #n3����<�0���+ -� ���6�C���03� -��3!(���h �<������`��-� ^_����30�L -�� � �3������ (.�� -�+ &V�~3��������+E30����� ���<�����0� 3��. �3,&c -+ rs:�+E3V ����*`� �3���(dNL���%30�.�R��p.rs��`<3c3�� pC�R`�����+E3E��:�`<3���(�#;&V���<���� -+X���Z -� -+0+E������������3 30�.�d��p.rs��`<3 3��. �3D��+ 3�� pC� -+0+0��������( 3�� -����� -(;� `�����3� -����+ +0������(. �3� *�=bc�. �3D��+ #3����B�7u*�.�0��+0+0�����d30���<�" �+0+0������������3 ���C�<�� �3���� �. -+ 3�� T���+E3,`<��> -��:��d3����B��p.rs��`<3 3�� pC�R -+E+0��������(�3�� -��( 30�.�<�=T.��+B��3B&%��3�� 3���� (���+0�~����(=`<����3�����3>� ^ 3 #C3����<���<NL����� #�`� -� pC� 3�����:�����3R��Ng -+! 6/*����(=��N`���� p.���. �3������d��N�(���+G30��:�`<3����% -��(Z`������ `<���.+G30��:�`<3����>�

Expression& Expression:: operator =(const Expression& f)

{

delete left;

delete right;

op = f.op;

val = f.val;

if (f.left != 0) left = new Expression(*(f.left));

if (f.right != 0) right = new Expression(*(f.right));

return *this;

}AB�.�j`���:��(!N �`<3���� ��:;3n3����j`<��������� `<�*(�� #�30� M3���+ #M3���� 3k&,�%(�����<30�j�7u*������+0+0�����.+ +0�. �����("&V��3�� 3����(���+E30�0:.`73����R -��( 3����!3k&,�����<& �7u*������+0+0�����.+%+0�. �����( &V��30��3���� `������ `�����+E30��:�`<30���B����30�6+0�<� ��� M3��������a- �3��d����� pC�<� NL:���`<3������.+<� bc����+0� NL:��.`73�������+ &,��:.�( 3������ pC�`> -���<( ��� pC��3�� � � -`���+�� �=���> �a[�R3�����+X -+% ��Z�7u;�7��`���+0� 3�� 3����"���> �(.�7�>�

Self-assignment.�%��NL���03�:��. �3��<�� #*&,�" ���� +E3����C����3X(����.�R�[�<3>� 5,����+0��(.�7�c30�.� NL�����'&V���.� `���(����

Expression e;

...

e = e;SV�30�.��:����d+0�����<&%�. �3 ������+0����+0��`� - #*3����BL �+E3,+E3� �30��������3g�� -��+0�<+, ������p.��<� �v^_�30�.� -+E+0������������3���C�<�� �3����gT���+G3 3����B`�����30����3 ��NC3����V��p.rs��`<3 30� pC�B -+0+E��������(�3�� ��+ (�����73���(63������d3����V���<& `<����3�����3��+dT.����(����y� �g:;3�����3�����+d`> -+0��#V3���� ���<&�`�����3�����3 ��+�3���� +� -��� -+d3���� ���( �����= -��( �~3d��+T���+E3D(�����<30��(z ��.(�#v3����<���<NL����� #g���+E3�� ^ 3 ��+ `�����������e_���*��(Ng ���� -`<3���`���3�� >a[����( 3�����+ ������p.��<� -�30�����<3����<�Rp*� ���������������d+0���N��k -+0+E������������3�+<� b,����+ `> -�=pC�D(������Dp�� `<���6� M��������3���� -(�(;����+E+0��+��N pi��3��Z���C�<�� -��(.+X -+cNL�����'&V+��

Expression& Expression:: operator =(const Expression& f)

{

if (this != &f) {

// rest as before

}

Page 189: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>#�q

return *this;

}

4.2.9 Expression tree arithmetic� � `> -� ���'&Up.:.���(�:;� �7u*������+0+0�����.+X -+cNL�����'&V+��

Expression x;

Expression x2(MUL , 5, x); // 5x

Expression y(ADD , x2 , 1); // 5x+1

SV�30�.��:���� 3���� NL:��.`73������. -���3k� �.�0�Ma*��(���( p�� 3����D`<���.+G30��:�`<3�����+R��+R+0: � `�������3 #C3����D+G�F��3� Mu ��+R����3���> ������.��> -+E�����;� � �"&,��:��(d�� �30�.�7�%��~/[� 3�� &%�0��3��

Expression e = 5 * x + 1;

����+E3��� -(y� bc����+ `> -� pC�� �` �����7a[��(4��� 3����+0 -����&c >� -+ &,�(���(zNL���D3���� `<L -+0+Rational

#jp*��'a[�<����[ -(������ 3���� �����30�.���73���`���C�<�� �30����+dNL���30�.� �7u*������+0+0����� 30����� `�� -+0+�� �X� M�0�w ����~3������<3���`���C�<�� �3�����+ -��( ��0��3������<3���` -+0+0������������3R���C�<�� M3�����+ ����D(��<T.�.�<( -+ �����Dpi�<�BNL:���`<3�������+ #y&V������p.���. ��0� �����3������<30��`j���i�<�� �3����0+v+0����:.�(DpC� (��<T.����( -+ �����p -*NL:���`<3������.+<� e �X�<NL�<� 3��"{*��`<3������D?;�����@q��� `> �+0� �[��: (��Z����3!�������<�DpC�7�"3����D���> -+0����+�� gwS%+!&,� �.L ��[��( �����:���( �*:���30� p.��3 &V�~3�� ��:;������������ �i`�L -+E+X(��<T.����3�������#*30�.��+c+E������+X D�����*( �i������3,3��D����+E3� M3��"�~3X���Z `����6�.��<3��RN -+0�������y�

class Expression {

public:

Expression();

// POST: * this set to primary expression x ( symbolic variable ).

Expression(double v);

// POST: * this set to primary constant expression with value v.

Expression(const Expression& f);

// POST: * this set to f.

Expression(int o, const Expression& a);

// PRE: o is unary operator (UMI).

// POST: * this set to o(a).

Expression(int o, const Expression& a, const Expression& b);

// PRE: o is binary operator (ADD , SUB , MUL , or DIV).

// POST: * this set to o(a, b).

~Expression();

// POST: Dynamic memory associated to *this deallocated.

Expression& operator =( const Expression& a);

// POST: * this set to a.

Expression& operator +=( const Expression& a);

// POST: a added to *this.

Expression& operator -=( const Expression& a);

// POST: a subtracted from *this.

Expression& operator *=( const Expression& a);

Page 190: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>q�] �_� ��� ����� �q � �+� �

// POST: * this multiplied with a.

Expression& operator /=( const Expression& a);

// POST: * this divided by a.

Expression operator -() const;

// POST: Return the negative of *this.

private:

int op; // encodes operator /expression type

double val; // stores constants

Expression* left; // pointer to left subexpression

Expression* right; // pointer to right subexpression

};

Encapsulation.AVp.+0�<�0a[� 3��. �3R���'&V���<��� ��� 3���� �.:;p ���`"� ��03R��N 3�����+V`<L -+0+V3����<�0� M�.�i�> ���+R -���

�C������3��<�>� bc��� (��*�. -����` +E3����� ���� �d -�. -�������<��3R��+" `����6�.��73����� ����3��<�0� �2NL�� �3�:;��� #v �� ���6�.����������3� �3������=(.�73� -��2&V����`�� ����pC�*(;�=&%��� :.+E��+ 3�����+ `�L �+0+ �. -+ 3��ZpC��`<���.`<�<������( &V��3��y��b��Z3������:;3�+0��(�� &,���0�( 3�����`�L -+E+

Expression������+E����3�+D �`<���6� ��<3����� +E3� -��( M��( `����*� +0���d -��3���`�+ #���3

pC���. �a[��+X��� 3���� +� -���B&c �� -+%NL:���(. -������3� - 3k�*�C�<+%(��;� �$%��(������R���6�.���������3� �3������ (��<3� -���+ p*� �����Ma*��(������! B`���> -�6����3��<��N �`��c&%��3�� ����3�:���30��a[� +0���d ���3���`<+

��+R����� ��N23���� �d -��� ���[ -�+V&%�.�<� (���+0����������� �( M3� 6+E30��:�`<30:��0� -��( ���.�D��Nj30�.� �d -��� pi�����<T�3�+`�L �+0+0��+c�.�0�Ma*��(�� ��� 5XW W �

Implementation of arithmetic assignment operators.S%+d -�w�7u� -�6�.���#,&,� (���+E`<����pC�Z30�.� ��� �

�.���������3� �3������ ��N!30�.�= -(�(���3������ -+0+0�����.���<��3���C�<�� M3����>�Ob,��� �����d ���������� ���i�<�� �3����0+ `> �� pC����6�.������<��3���(���� -�Z �� ��������:�+cN �+0�������y�

Expression& Expression:: operator +=(const Expression& a)

{ return *this = Expression(ADD , *this , a); }

b,�.�!����+E3%+E���6�.���&c ���3��6���6� ���������3,�~3V��+c3��6`<���� �3�� `<���6�C��+0��3��R�7u*������+0+0����� N��0��� 3����"3k&,����C�<�� -��(.+X -��(�3�������`����*�d3�����+,�7u*�.�0��+0+0����� ����3��

*this:�+0���.� 3����" -+0+0������������3,���C�<�� M3����>�

bc��� �pC�'a[� ���6� ���������3� �3������Z��+ `<���0����`<3 #np.:;3!�~3"��+ +E�����<&V�. �3R����� � `�������3>� �����+G3"�~3"`<��� ����+pC��3��3����R�7uF������+E+0������+X30�0����+

*this ��.(

a����3�� 3��<�6�C���� ��0�6��p rs��`<3ke_`7���> �3��<( p*�d3���� �7uF�.���`���3

`�����+E30�0:.`73���� `> �� g�#�3�������3����V �+0+0������������3g���C�7�� �3����j(�����<3��<+g3����X30�0���*this

#* -��(6T.� ���� `����.����+3����,3����6�C���� M�0� ��p.rG�<`<3 y@+ `�����3�����3g����3��

*this� ;���j30�.� �G30��:�� � `������ +0�<�d -��3���`�+v��32��+ �����<aF�~3� �p.��

3��. �3 �`������ ��Na��+B`<���> M3���(y� $%�'&,�<a[�<� #y��3R+E������+R:��.����`<��+0+� ��E� 30�`<���*� 3���� �7uF������+E+0����� 3E�����

(���+0`<�0��pC��( p*�*this

��.(w�<a[�<�w30� `����*�z��3 3k&%��`�� ��^_��(�����(�# 3�����+ `<���*�4`� -�4pC� �a[����(���(�#, �33���� `���+E3V��N2(��> ������� &V�~3�� (;�F�. -����`"���������0��d -�. -����������3,&V��3������ 3���� -(�(.�~3������ -+E+0������������3���C�<�� �3����>�bc���!p -+E��` ��(��> D��+X3��6�0��:�+0� 3����!3k&,�6+0:;p�30�����<+

this->left -��(

this->right���.+G3��> -( ��N

`������F����� 3������ � b,�.��+ �.�<��(�+% -����3����<� &c ��630�D`<���.+G30��:�`<3X -�Expression

#;�. -������ #[p*�d(��~����`<3�~������'aF��(������ 3���� �C������3��<�0+VNL���

left -��(

right&V��3�����:;3V`7���> �3����.�d �G3E��:�� ��`����*� ��Nv3������ �%SV+

��� ��'#' 9��='�� ���B�3<�=���� ��D��� ����!9%�= � �&�����)�������( �����=' C �)A%���# ��#��7��'�� �)��@ G

Page 191: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>q;�

3���� (��<3� -���+%��Nv3���� ���������0� �d -�. -�������<��3c+0����:��( �.��3Bpi� �7uF�i��+0��(�#i3�����+V`�����+E3E��:�`<3����R+0����:��(pC� (���`�L ��0��( -+,������a- �3���� ���������� ��� 3���� (��<3� -���+c��Nn3�����+X ����.�0�[ -`�����+c���N�3% -+X -�Z�7uF�<��`���+E���

Binary arithmetic operators.SV+BNL���B3���� `�L -+E+

Rational# 3�����+0� ���C�<�� M3�����+B ��0� ���6�.���������3���(

-+ �����p -jNL:.��`<30������+ &V����`�� +E���6�.�� �0��NL�<�D3�� 3����`<���0����+E�i���.(������ -+0+E������������3!���C�<�� �30���>� �=�������+0�<��3%30�.� ���6�.������<��3� �30�����6��N 30�.�" -(�(���3���������C�<�� �3����X -+X -�Z�7u; -�6�.����

Expression operator +(const Expression& a, const Expression& b)

{

Expression f = a;

return f += b;

} X��3��,3��. �32pC��3�� � ��� -���<3��<�0+j M���X�C��30����3��� -���!L ������c��p rs��`73�+2&%����`�� �����d -��� :������*(���T.��( p*�D3�������C�<�� �3����>�2b,�*:�+ #;3����<� ���� � �+0+0��( �+X`�����+E3X����NL�<�0����`���+��

4.2.10 More expression tree functionality ����. -��� # ��3 ��+D3������63�� -(�(4+E����� �G�0�> - � NL:��.`73������. -���3k� 30� 3������ uF������+0+E�����z30���<��`�L �+0+��zAR�������3��<����+G3������ NL:.��`<30�����30� M3 &,�B���+E3��<( ���d3����BpC��������������� ��Nn3�����+ +0��`<30����� ��+ 3���� `<���6� :;3� M3���������N3���� (��<�0��a� M3���a[� ��N, �� �7uF������+E+0������# ����3��<�0�����<30��( -+ d���> -jNL:.��`<30����� ��� 3���� +E�F� pC�����` a- ����L Mp ��x� my�<3X:.+X -(�( ����� pC�<�,NL:���`<3������

derive()3�� 3����"`�L -+0+,&V����`�����<3�:;����+V ���<&x�7uF�����<+0+0�����

30���<�"���<�����<+0����30����� 3���� (.�7����a- �3���a[�R��Nv -���7uF������+E+0������&%��3�� �0��+E�C��`73X3��x�

class Expression {

...

Expression derive() const;

// POST: Returns the derivative of *this interpreted as a real

// function in the variable x.

...

};SV+ 3���� NL:.��`<30����� `<���6� :;3��<+, D���<&)�7u*������+0+0�����Z -��(�(�����+X����3,`��. -����� 30�.�R����� ��3,��+,`> -����( NL��� #��3c��+c(��<T.�.�<( -+X D`�����+E3X����� pC�<�,NL:���`<3������y�$%�'& `� -�6��32pC�c���6�.���������3���( � ����j�������d ��0� �7uF������+E+0������+j3����c(��<����a- �3���a[�c��+j -�+0�" B�.�0���d ��0�

�7u*�.�0��+0+0�����d&V����`��d��+ ���~3����<� � �<��� ���,������� SV��(NL���,`����6�C��+0��30�%�7u*�.�0��+0+0������+ 3����B(��<����a- �3��~a[�V`> -�pC� `����6�.:;3���(Z�0��`�:;��+0��a[�<�� #i:�+0�����63���� +E3� ��.(. ��0( �0:.���+BNL���B3���� (��<����a- �3���a[�!��N2+E:.��+ # �����*(�:�`<3�+ # -��( ��:.��30������30+��

Expression Expression::derive () const

{

// no arguments

if (op == VAL) return 0.0;

if (op == VAR) return 1.0;

assert(left != 0);

Expression l = left ->derive ();

Page 192: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>q � �_� ��� ����� �q � �+� �

// unary operator

if (op == UMI) return -l;

// binary operator

assert(right != 0);

Expression r = right ->derive();

if (op == ADD) return l + r;

if (op == SUB) return l - r;

if (op == MUL) return l * * right + r * * left;

assert(op == DIV);

return (l * * right - r * * left) / (* right * * right);

} X��3�� 3���� :�+0� ��N -+E+0�<�03������.+c3�������+0:;���!30� M3V���6�*:��y�C������3��<�%��+%(��<���<NL�<������`���(y�%bc����+V��+V Da[�7�0����*��(���(��> �����������<�� -_�

���������<a[�<�V(��<�0��NL�<������`����.�6 �C������3��<�X -~&c >�*+,`�����+0��(��<�c3��. �3%�~3X�d ���pC�R3���� �*:��C�C������3��<�7�K L -`��" -�Z �+0+0�<�030������&V���<�0�"����`��<+0+� ��0� 3��D`> �3�`��Z3�����+,`> -+E� �

SV������!3����V+0 -���%����.�<+j&,�V`> �����6� ���������3v !����� pC�<�jNL:.��`<30�����63�� �<a- -�:. �3��% -�d�7uF�����<+0+0�����NL���� ���~a[��� a- -�:�� ��N"3���� +E�F� pC�����`�a� M���L �p.�� #c+� ��

x = 1� ;���+E�F��3� -`<3���`> -B`�����a[����������30�� #

&,�` ������+0�30�=�'a[�<����[ -( 3���� NL:���`<3������z`> -� ���C�<�� �30���Yeoperator()

g NL��� 30�.��+ �.:;�0�C��+E��� bc���(���`�L M�� �3������ -��(Z���6�.��<������3� M3������ ��N 3�����+,NL:.��`<30�����Z��+,���N�3% -+X -�Z�7uF�<��`���+0���

4.2.11 Friend� � `�����`��:�(�� 3���� (���+0`�:�+0+E�����=��N � uF������+0+E�����=30���<��+"p�� �����'aF��(������ -� ��:;30�.:;3 ���C�<�� M3����!NL���"��3>�SV+V3�����+%���C�<�� �30���B��+R 6�����p -nNL:��.`73�������# 3����<��� ��+R �.�0��p ���� &V�~3��Z3���� ����`�� ����`> ��.+0:�L M3������ ��N��:;�V`�� -+0+�� S%+V �����p �CNL:.��`<30�����Z3�����+c��:�3E� :;3X���C�<�� M3����%(�����+%����3X� �a[� �`�`���+0+X3�� 3����"�����~a� �30�(. �3� ����� pC�<��+,��N�3����"�7uF������+E+0����� 30�����"`�L -+E+��"�g:;3%3������ ���'&Y��+X+0:;���C��+0�<(Z3��6��:;30�.:;3%��3�� ;���3����

Rational`�� -+0+B3�����+V&c -+R����3" �.�0��p ���� pC��`> �:.+E� ��30+B( M3� 6����� pC�<��+B M���D -���.:;p.���`> -���

-`�`<��+0+0��p.���# 3�����:.��� ����3 ����(���T �p.���� �g:;3 3����6�7u*������+0+0����� 30�0����`�L -+E+ ���*��+ �����6+G3��<� NL:��E3����<� -��(Z(��*�<+X����3% -���'&U�<a[���Z�0�> -( � ������ -`<`���+0+c3�� ��30+X����3��<���. -�+��bc���<�0�� ��0�� �3D��� -+E3 3k&,� �C��+E+0��p.��d+0���:;3�������+!30� 3�����+ ������p.���� � AR��� ��+ 3�� (��<T.���d� :;p.���`

����� pC�<� NL:��.`73�������+ &V����`��4�����'aF��(��Z+E:.`�� ���> �( �_������ -`<`���+0+�3�� ���� uF������+0+E������3E�������Ub,�����3����<�X��+,3�� ���� -��3c3����"��:;30�.:;3c���C�<�� M3����V �`�`���+0+c3�� 30�.�R������a- �3�� (. �3� *�

;���c30�.�R+� M/[� ��Nn+0���6�.���`���3k� &,� ��� NL���c3����B+0��`�����(Z+E���:;3����������<�����j$%�'&U`> -�&,�R+0�����`73���a[�������� -��3c -`�`��<+0+ 3�� 3����V�.�0��a� M3��B(. �3� !��N `�L -+E+ &V��3�����:;3 ���<�.�7�� -��� �7uF�i��+0����� ��3�+ ����3��<�0� ��+��Zb,�.��+��+c�C��+0+0��p.�� p*��(.�<`�L ������.� 3���� ��:;30�.:�3%���C�<�� M3����%3�� pC� Kh= �J�>#�B ��N 30�.�!�7uF������+E+0����� 30����� `<L -+0+��{��F��3� -`<30��`> -�~� #'30�.��+� -����:���3�+n30�%(���`�L M���j3����j���C�<�� �30��� &%��3������"30�.�j`�L -+E+

Expression#�������`��<(.�<(

p*�d3���� /[�<�*&,����(friend

class Expression {

...

friend std::ostream & operator <<(std:: ostream&,

const Expression&);

Page 193: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>q�8

...

};^_� 30�.��+ &c �� 3����NL:��.`73������z(���`<L �����(z -+D N���������(4�. -+D -`�`<��+0+ 30� 3�����������a- �3��d(. �3� ����� pC�<��+��Nj30�.� `�� -+0+R��� &%����`�� 3����D(���`�L ��� �3������ ����C�> M��+��Fe �c��`> -� 3��. �3 �NL:.��`<30�����=�d ��ZpC� (���`�� �����(�d -����3�������+ #�3�����:.��� (��<T.�.�<(Z����`��!������[� g� � `> �� #.3����<����NL���0� #C���6�.���������3 3���� ��:;30�.:;3B���C�<�� M3����V��� D����`�:;��+0�~a[� &c �� # +0������L M� 3��63����

derive()NL:���`<3�������(.��+0`�:�+0+0��(Z �pC�'a[���

std:: ostream & operator <<(std:: ostream& o, const Expression& f)

{

// no arguments

if (f.op == VAL) return o << f.val;

if (f.op == VAR) return o << "x";

// unary operator

assert(f.left != 0);

if (f.op == UMI) return o << "-(" << *(f.left) << ")";

// binary operator

o << "(" << *(f.left);

assert(f.right != 0);

if (f.op == ADD) o << "+";

else if (f.op == SUB) o << "-";

else if (f.op == MUL) o << "*";

else {

assert(f.op == DIV);

o << "/";

}

return o << *(f.right) << ")";

}AVp +E�<�0a[�V3����c:.+E�V��N � �������3�����+0��+j&V����`��6��+2����`���+0+0 ��0� 30� `> ���3�:;���c3����%+E30�0:.`73�:;���%��N 30�.�X�7uF�����<+��+0�����y�v����3�����:;3 3����B� M������30�.�<+0��+ #�NL���c����+E3� -��`���#� -����:;30�.:;3

2+1*4`���:��( ���� -�pi��3��

(2+1)*4 -��(2+(1*4)

4.2.12 Details^_�z+E�����6�.�0������ -���������L -����:. -����+ +0:�`��4 -+Dmy��+E� ��� �� �a- # 3����<������:���+ @�,.=Sh,$@c� H'��!.*/* ���>�<!$=&V����`��/[���<�.+c3E�� -`�/��N -� ���������0�6`���:.�;/*+%��� 30�.�R���> �� -��( &V����`����p rs��`73�+XN��0��� ���������� ������NL�7� 3��Z3������ � ^_Nc�����6��N 3����6`���:.�;/*+D��+!����3 ����NL�7�0����( 3�� N������ 3���� ���������� -� -���F������� #n3�����[ ��0p -����� `�������`<3����,N����<��+%3�����+,`��*:��;/Z ��.(��d �/[��+,��3X �a� -��L �p.��BNL���%�0��:�+0���^_� 5cW"W #g3����<�0���+D��� �[ ��0p -�����_`������<`<3���� p�� (���N �:.~3>� � b,����+ � �+ 30�.� -(;a- -��3� -����3��. �3D

���������� -�����7�v�. -+g�������,`�����30������������M&����������E� ��+j:.+E��(y���g:�3j��3g -�+0� ��> �a[��+g p.:;��(���� 3�� 3����� � �� �)�= ���,��'���� � �*� C ������� @������#���)@ 9&����( ��� G

Page 194: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>q�? �_� ��� ����� �q � �+� �

���������� -�����7� #� -+j+0���%�. -+j30�!����+0:;���%30� M3g�<a[�7�0� �.���<`��%���������E� 3��. �3j��+ -���*`> M3���(D(��*�. -����`> -�����+X -�+0�D(����k ����*`� �3���(d�������C�<��~�[�

4.2.13 Exercises

Exercise 70\ �4,5�kB !� �9�V�;� KL!.*/* !$1��/#;@9(0=>!�@$=�,.8 !$:;� (0:4��A�,.#�B?13��D �

#include <iostream >

int* f(int* i)

{

++*i;

return i;

}

int main() {

int i = 5;

std::cout << *f(f(&i));

return 0;

}

Exercise 71� ��� ���"!$# �uW �;W �OB � ����= �"S>�>�E,7��!$8��>13�4,5�?�/# � � ���J�>#0�?�[8X(+* �>82�>#0�J,5���"!$# ! K �V�;�

,.= ���V��8�� ���J�C,5�>��� @$#I82��#0�G!>(I��=�,5�<!$=)�LW � 8X(+* �>8��>#0�?�V�;� !>(+���/86���5,5���J!$# �>Zq� �<� �;�hB �V�;�>=>� �/#!$=�B �>=Y�<!M,.p�!$�"B ��=>�h,5���[#;@28Y:;*P���T(+* �R��!>(0�J�>�?! K �V�;�R�'&)(0=>�>�>���J!$# ��=>�h�Y13���"� �M���F82!LB.� { �hB S D�V�;� !>(I�>=�,5�<!$=W%�������?�[#Ip�!.*dp�� � B � ��� @$#I�/#;@C,G(0= �/pw,5�<� ��!$#0����= : � �<!$=�13�/�V�O, (I!$�[#0�<�>= Sh,5���hB�/#0�<��=VKL, ����K�!$= �V�;� ��:+S)Hh� &)(0=>� �>�h�J!$#0� ,.#�B?:;�h�/#;@6�V����� ��!$#0�>��= :u� �<!$= �<!�@c�>�V�;�>= 1����V�]B.D5#�,.86�"�82��82!$= DG8�,.#�,$@c�>8��>#0� �h, (c(0=>!>(0= � ,5�<� # �>1%�'&)(0=�� �>���"!$#0� �/#U�V�;�F�/89(+* �>8��>#0�J,5���J!$#7! KX�V�;�,.= ���V��8�� ���J�M,5�>�h�[@$#I8��>#0� !>(I�>=�,5�<!$=)�LW � 8X(+* �>8��>#0�X�V�;� !>(I��=�,5�<!$=)�

+=A-=

A*=

A ,.#�B/=

�[#�V����� !>(+���/8Y� �q�'B?1�,.D ,.#�B (0=�!$p�"B � ,R�>�;!$=)���<� �>��(0=�!�@$=�,.8 K�!$= D`!$:4=9�/89(+* ��82�>#0�J,5���"!$#�W

Exercise 72 � BcBM,G82��8�S>��= Kh:4# � ���"!$#E�<!��V�;�R� *-,5�>�Expression

1����"� ���>pw,5*d:u,5�<� �6,.#7�'&5H(0=>� �����J!$#sKL!$= ,i@$�[p��>#Rpw,5*d: �s! K��V�;����D58�S�!.*P�"� pw,.= � ,cS)* �

xW � !$: 8G,.D�!$pw�>=)* !L,cB9�V�;��K�:N# � ���J!$#

�h,5*[*s!>(I�>=�,5�<!$=��operator() KL!$=2�V���/� (0:N=<(I!.���>A S :4�XD`!$: 8�,.DQ,5*P��! � �;!!.��� , B.� �i�>=>��#0�

#�,.82�6� K DN!$: 1�,.#0�JW a =>!$p��"B �2S�!.�V�QB ��� *-,.=�,5���J!$# ,.#�B �/8X(+* �>8��>#0�J,5���J!$# ! KY�V�����kK�:4# �>���J!$#,5* !$#;@61����V�],R�<� �>��(0=>!�@$=�,.8 �V�4,5� B �>8�!$#0�>��=�,5�<� �X�V�;� Kh:4# � ���"!$#�,5*P�/��D`W

Exercise 73� K?D`!$: ��!$89(0:;�<�M,6KL�>1 B ��= �/pw,5���[p�� �R:;���[#;@]�V�;�

derive()8��>8�S��>= Kh:4# � ���"!$#

! K !$:4=��'&)(0=>� �����J!$# ��=����M� *-,5�>��AkDN!$:C1���*[* =>�h,5*d� �5�R�V�4,5�s�V�;�>=>�6��� �<��#�B5�6�<!2@c��# �>=�,5�<�R8�,.#ID* �>#;@.�c��D S :;����= �/p� ,5*��h:uS>� &)(0=>� �>�h�J!$#Q! K9�V�;� ��D (I� �q�>=>!?���/82�>�X��!$8�� �V���/#;@A �q��=>!X(+*d:;�9��!$82�>H�V���/#;@Ak!$=Y!$# �F���[82� �9��!$82�>�V���/#;@�W

� BcB�,R82�>8GS>�>= K�:4# �>���J!$#��<!6�V�;�6� *-,5�>�Expression

13���"� � ���[8X(+*d� { � �f�V�;�Y�'&)(0=>� �����J!$#,5�_�4,.#�B S D =��>82!$p�[#;@9�V�;� ���b�V��=>�h�k��D (I�>�f! K���= �/p��",5*4�h:uS>� &)(0=>� �>�h�J!$#0�LW � *P��! (0=>!$p� B �s,9�>�;!$=)��<� �>��(0=>!�@$=�,.8 �V�4,5� B �>8�!$#0�>��=�,5�<� �X�V�;� Kh:4# � ���"!$#�,5*P�/��D`W

Page 195: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�q��� ������� �?� � ��� � � ���f� � ��� ��� �>q[I

Hint: � � ��� @$#U,i(0= �/pw,5�<� 82�>8GS>�>=�K�:N# � ���J!$#M13���"� �?=>�J(+*-, ��� � ,.#Expression

S D����V�s* ��K����:+S)Hh�'& (0=>� �>���"!$#�W �I�/8Y��*-,.=)*PD5AcK�!$= �V�;�b= �[@.�c����:uS Hh�'&)(0=�� �>���"!$#�Wkl ,5Zw�k��:4=>�k�V�4,5���V�;�k8��>82!$= DK�!$= �V�;�X=��>82!$p��'BG��:uS ��=>��� �9����(0=>!>(I�>=)*dD � * �h,.# �hB :5( W

Exercise 74^ &5�<�>#�B9�V�;�s�'&)(0=�� �>���"!$#R��=>���i�>* ,5�>���<! ,5*P��! =>�"(0=>� ���>#0���'&)(0=�� �>���"!$#0� �V�4,5� �[#Ip�!.*Ppw�

�V�;� KL!.*/* !$1��/#;@ K�:4# �>���J!$#0�LW

� �'& (I!$# �>#0���",5���"!$#�1����V�]Sh,5���e

�2.7182818

,.#�BR#�,5��:N=�,5* * !�@�,.= ���V��8 ,.#�B

� �V�;� ��= �[@c!$# !$8�� ��= �J��K�:4# �>���J!$#0� +0��� A `���+ A�,.#�B 3� -� W� #U(;,.=)���"�>:;*-,.= A �[# ��!$=<(I!$=�,5�<�G�V�;� �L� K�:N# � ���J!$#0�Y�/#0�<!M�V�;� ��pw,5*P:+,5���J!$#MKh:4# � ���"!$# �<���h� ^ & �>=)H�>�/��� � � ,.#�Bi�V�;� !$:;� (0:4��!>(I�>=h,5�<!$=W ^ &5�<�>#�B.�/#;@f�V�;�

derive()K�:N# � ���J!$#Y���b!>(+���J!$#�,5* ��� &q��=�,

�>=>�'B.���V� W���!$:Y8�,.DF:4���b�V�;�_K�!.*/* !$1��/#;@3K�:N# � ���J!$#0��KL!$= 13���"� � DN!$: �4,.p��b�<!9:;�L� �V�;�b�[# � *P:+B �B.�/=���� ���[p��

#include <cmath>W

� double std::exp(double x);

� double std::log(double x);

� double std::sin(double x);

� double std::cos(double x);

� double std::tan(double x);

Exercise 75�m�;� !$:;� (0:;� !>(;�>=�,5�<!$=�K�!$=f�V�;� �'& (0=>� �>���"!$# ��=>����� *-,5�>� �V�4,5���4,5�XS����>#CB � ����= �"S>�'B

�/# � �h� ���J!$# �uW �;W ���6�/� p��>= D @c�># �>=�!$:;�F�/# (+*-, �>�[#;@ (;,.=>�>#0�V�;� �L� �LW ^ p��>#C13�;�>#M(;,.=>�>#0�V�;�>��� �,.=>�X# !.� # ���'B �hB.A+K�!$= �[#0�>�J,.# ����A��[# �'&)(0=>�>�>���J!$#0�9*d��Zw�

2+3+4�/� !$:4� (0:;�V��A��L,.D5A

((2+3)+4)W

� ��13= �/�<� �V�;� !>(I��=�,5�<!$= �<!2(0:;�k(;,.=>�>#0�V�;� �L� � !$#0*dD 13�;�>=�� # ���'B �hBGK�=>!$8 ,.# ,5* @c��S =h,.�J�(I!$�[#0�G! K p��J�>1�W � \ � �[@# !$=>�]�V�;�YK , � �Y�V�4,5� �'&)(0=�� �>���"!$#0�C!$#��V�;�]��D (;�

doubleB !C# !.�

�>��= �"� �V*PDMS�� �4,.p��Y,5� �'&)(0=�� �>���"!$#0��!$#U=��h,5* #I:48GS>�>=)� B !�W Exercise 76 � +G3� -`�/ �/�f,?B.D5#�,.86�"�XBc,5�J,F�>��= : � ��:N=>�i�V�4,5� �>�<!$=�� �9, �L� � :u�># ���F! K

intpw,5*d: � ��A

�L,.D5A�!$=�B �>=>�'BfK�=>!$8 �<!>(U�<!2S>!.�V�<!$8GW � ���/�b(;!.�>���"S * �X�<! �.:�+0� ,?# ��1 pq,5*P:u�Y!$#0�<!6�V�;�F�>�J, � ZLA8�,5ZL�/#;@F�/���/�V�k# �>17�<!>(2pw,5*d: �>A�,.#�B �<! �C��� A_82�',.#I�/#;@F�V�4,5� �V�;� �<!>( pw,5*P:u� �/��=>�>82!$pw�hBR,.#�B=>� ��:N= # �hBcW � (+���J!$#�,5*[*PD5A3�V�;�>=>��,.=>�Y,6#I:48�S��>=?! K !.�V�;�>=�, �����>�>��Kh:4# � ���"!$#0�LW

, a =>!$p� B � �/89(+* ��82�>#0�J,5���"!$#0��K�!$= �V�;�Y�>* ,5�>�Stack

B � { # �hB�S>� * !$1�W

�#include <iostream >

�#include <cassert >

�namespace math {

�class Stack {

�public:

�Stack();

Page 196: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>q�P �_� ��� ����� �q � �+� �

// POST: * this is initialized with an empty stack

Stack(const Stack& s);

���// POST: * this is initialized with s

� �~Stack();

���// POST: all dynamic memory associated to *this is freed

���private:

���Stack(int v, Stack* n);

���// POST: * this is initialized with v and n

���public:

� �bool empty() const;

��// POST: return value is true iff *this is empty

��int top() const;

� �// PRE: *this is not empty

� �// POST: return value is top element of *this

� �void push(int i);

� �// POST: i has been pushed onto *this

� �int pop();

� �// PRE: *this is not empty

� �// POST: top element popped from *this and is returned

� �

� private:

� int val;

� �Stack* next;

� �};

� �} // end namespace math

S \ = ���<��,.# !$:;� (0:4�k!>(;�>=�,5�<!$= KL!$=F�V�;�6�>* ,5�>�Stack

W� ���>�>� D`!$:4=�� * ,5����� �f13�/�V�],?�>�;!$=)� �<� �>��(0=>!�@$=�,.8GW

Page 197: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Chapter 5

Generic Programming

�>q[o

Page 198: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�>q�# �_� ��� ����� �5 ��� � ��� � �U��� � �3�����?� ���

5.1 Function Templates�������s�L��� ���"!$# �[#0��=>!�B.: �h� � ,Y8���� �4,.#I�/��8 �<! B � { # �F,�13�;!.* �9��� �b! K !$pw�>=)* !L,cB �hBKh:4# � ���"!$#0�6p�",C,]���[#;@.* �iK�:4# �>���J!$# B � { #I�����"!$#7�V�4,5�i���2�',5*/* �hB , NL:��.`73������ 3���� ��.L �30� W \ �/�V�O�V�;� �;� * ( ! KXK�:4# �>���J!$# �<�>89(+* ,5�<� � , S>:4# � � ! KY(;!.�>���"S *PDC1���*-BN*PDB.� �i�>=>�>#0�?!�S � ��� �V� �h,.# �>�4,.=>�]��!�B �M�V�4,5��!.�V�;�>= 1������G1b!$:;*-B��4,.p����<!QS��2=>�J(+*d��H�',5�<�hBGK�!$=��', � � ! K2�V�;��8�W �m�4,5�F�/��A :;���[#;@Q, Kh:4# � ���"!$# �<�>8X(+*-,5�<�M82�',.#0� �<!* � � �V�;�G��!$89(0��* �>=?�4,.#�BN* � ��!�B ��=>�J(+*d�J�',5���J!$#Q�[# ,.#7,.:;�<!$8G,5�<�hB 8G,.#I# �>=WC���;�S��># � { � �/�Y�V�4,5� * � ��� �h!�B �?�4,5� �<!]S>�61�= �/�V�<�># ,.#�B �C�>p��>#Q82!$=>���/89(I!$=)�J,.#0�V*PD� 8�,.�[#0�J,.�/# �'BO,.#�BE�V�4,5�R,E���/#;@.* � K�:N# � ���J!$# ����82!$=>�M@c�># ��=�,5*/*dD , (c(+*d�J�h,cS * �>A,5�F�/�b�/�F# !.� ���"�hB2�<! !$# ���"(;���>� { � ,.="@$:48��>#0� ��D)(I��W?lU!$=>��!$pw�>= A �V�;� �[# �>=>�h,5�L�hB@c��# �>= �J�>�/��DC��!$82�>�Y1����V�;!$:4�9,.#IDM= :4#0���[82����!.�>��Af,5���/� �/���4,.#�BN* �hB ,5� ��!$89(0��* ����[82��W

mn�73g:�+ ����`> -��30�.� p.���. ��0� �D:��3����.���`> �3������"���C�<�� M3����2NL���j3����c`�L -+E+Rational

� b,�.��+2���i�<�� �3������+c(��<T.�.�<(Z��� 30�<����+,��N�3���� � :��3��~� ���`> �3������6 -+0+E������������3,���C�7�� �3����

*=# �+X+0���'&V��pi����'& �

Rational operator *(const Rational & x, const Rational & y)

{

Rational r = x;

return r *= y;

}^_�UN -`<3 #V3����=����������� �%a[�<��+0�����U:.+E��(U`> -� �_p*� �_a- -�:�� +0���d -��3���`�+ #V -+ &,� (���( ����3��. �a[�

const����NL�7������`���+� M3 ��:;� (.��+E�C��+� - p -`�/ 3������y�45 ��> ��0�� #230�.��+DNL:���`<3������4(��*��+D����3 :�+0�� -��� +E�C�<`���T.`�������C�<�E3s� ��N23���� `�L -+0+

Rational� ^_��(�����(�#C&,� �. -( 3���0��� ���6�.��<������3c3�����+Ba[�<�0� NL:���`<3������ NL���

3����Expression

`<L -+0+ #n+0���6�.�� ���<�.L -`<������ -��� �*`�`�:;�0�0����`�� ��NRational

p*�Expression

� ^_N&,� ��� ���=3�� ���6�.���������3%�[�<3 -����3����<� M����3������<3���` `�L -+E+ #�+� �� #y3�� �0�<������+0����3 �C����*�������L -�+ #.&,��. �a[� 3�� �������<�� M3�� �[�<3D ��.��30�.�7� �������D��� ���+E+ ��(�����30��`> - `������ ��N 3����� �pi�Ma[�6NL:���`<3������ NL��� 3�������<&t`�L -+E+��6ABN `���:;��+0��# 3����<���D��+ ����3!������

operator*#np.:;3! -�+0�

-#*#/#!=#>#>=# -��(

<=�

���. �3D �3���(�����:�+!3� �+E/ � ;:��E3����<��������� #�+0:;�.�i��+0��3�����NL:.��`<30����� :���(��<� `�����+0��(��<�� �3������ ��+ �����0�`����6�.���`� �3���(Z3��. -� ��� ��:��"�7u; -�6�.�� ���<����� ^_� +0:�`�� �`> -+0� #n��3R��+B�� M3����<� ���/[�����3��. �3R3����D`<�*(��������(�+ 3�� pC�R`�� ��.���<(Z �3,+0�����X�C������3 #F -��(�> -`���+0:�`��Z`��. -�����B�. -+ 3�� pC�B(����.�R��� -� `����.����+,��N3���� NL:.��`<30�����y�jb,�. �3X+0��:��.(�+c���/[� 30��:��!��������3��d ���� �

;���03�:��. �3����� #n3����<������+ -� �> -+E�=&c >�=��:;3>��=��`> -� (��<T.���� K�:N# � ���J!$#7�<��8X(+*-,5�<� NL��� 3���� �pC�'a[� ���C�<�� �30���>�j{*:.`�� 3����6�.L M3��V��+c +0��������BNL:���`<3������ (.�7T ����30����� N��0���\&%����`�� 3���� `����6�.����<� -:;3����d �30��`> -�~���������<�� �3���+! -� ������(���( a- ����L �30������+ NL���!(���hi�<�0����3 �����:�������3B3k���C��+��6S|NL:��.`73������3����6�.L M3��"NL���B30�.� �pC�'a[� ���C�<�� �30���B��*��/*+V -+BNL�����M&%+ # -��( ����`��!&,� �. �a[� ��3 #.&,� `> -� ������3c3����+E�C�<`��L -�� � ��( a[�7��+0������+cNL���%3����R3s���C��+ Rational -��( Expression

template < typename NT >

NT operator *( const NT& x, const NT& y)

{

NT r = x;

return r *= y;

Page 199: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�5 � ����� � � � ��� ��� �?� �0� ��� �>q�q

}

5.1.1 Template Parameters12 -`�� NL:.��`<30����� 3����6�.L �30� � �+ -� -(�(���3������ � ��<a[��2��N � ��� -���73��<��+B3��. �3! ���� `> -���<( �<�>8X(+*-,5�<�(;,.=�,.8�� �<�>=)� �j^_�6`�����30�� -+G3g3�� �E:�+0:. -��"NL:���`<3������ � M�� -���<3��7��+2&%����`��� ����X�<a� ��:. �3���(� M3j��:���3������ #3����6�.L M3��"� ��� ����<3��<��+V ���� -�&c ��*+V(��<3��<�������.�<( M3B`����6�.���� 3��������VS%�.��30�.�7�R�d -rG���%(���hi�<�0����`����+,3��. �3,3����6�.L �30�V� M�� -���<3��7��+ �d ���pC� �d -��(Z:�+0:. -��� M��� �63k�*�C��+<�{��F��3� -`<3���`> -��� #�3����"(��<T.����3��������N NL:���`<3�������30���6�.L �3��V��*��/F+c -+XNL�����'&V+��

template ���I� ��� ��#��� � � � � #C���~��# �� � ���� �

� � �� � � e � � � �� � �L� #�� � � �� � � � #y���~��# ��� � �� � ��� g� � � ���

^ 3D+E3� ��E3�+ &V��3�� 3�����/[�<�*&,���0(template

#gNL�����M&,��( p*� `������d � +0�<� ��� �3���( ���+E3 ��NX3��<�6� � �3��� ��� -���73��<��+,����`����+E��(Z���� -������Bp.�� -`�/[�<3�+

<>�j1j -`���30���6�.L �3��V� ��� ����<3��<�c��+,����30�.�7�

� 3k�*�C� � ��� ����<3��<� #,(���+0`7����pC��(�p*� 3���� /[�<��&,����( typenamee ���d� �*:���a- -�����3��� #

classg

NL�����M&,��(p*� -�Z��(.�<��3���T.�<� #F���

� %����� �_3k���C�g� ��� -���73��<� #�(.�<+0`<����pi��(Dp�� ��3�+n3k�*�C� NL�����M&,��( p�� -� ��(�����3���T.�<� z-30�.� 3k���C� �D:.+G3pC� ����3������� - �

b,�.�g��(�����3��~T �7� 3��. �3 ����C�> ��0+ ��� 3���� (���+0`7������3������ ��N� c3����6�.L �3��v� ��� ����<3��<� ��+����<NL�<�0����( 3��B �+�3����#�,.82� ��Ni3�����+j� ��� -���<3��<����SVN�3��7� 3����V`����+E�����"p��� -`�/[�<3 ��Ni30�.�c3����6�.L �30�,� ��� -���<3��<�j���+G3gNL�����M&%+ �E�.���0�d - � NL:���`<3������ (��<T.�.�~3�������#F���&V����`�� 3���� �. -���B��N -���d3����6�.L �3��X3s���C�R� M�� -���<3��7�,�d >�pC�R:�+0��( �+X !3k���C�! ��.(d3����R�. -���B��N� �����3����6�.L M3��V����� �_3k�*�C�B� ��� ����<3��<� �d ��6pi� :�+0�<(Z -+c -��7u*�.�0��+0+0�����y�

;��� ����+E3� -��`�� # 30�.�����i�<�� �3���� ��� 3����6�7u� ��6� �� N������ �pi�Ma[���. -+ ����� 3��<�6� � �3�� � ��� -���<3��<�&V����`�� ��+ 3k�*�i��� ��� -���<30�<� &%��3��4�. -���

NTe 3�������������������`�+G3� -��(�+6NL��� �E��:.� pC�<� 3k�*�C� �5g �

�g����'& ��+� -� �7u; -�6�.����N" NL:��.`73������43����6�.L M3��&%��3��z3k&,� 3��<�6� � �3���� ��� -���<30�<��+ ��30�.� T.�0+E33����6�.L M3��D� ��� -���<3��<�

NT��+ 3k�*�C� � M�� -���<3��7� -��( 3����6+0��`<���.( 3����6�.L M3��D� ��� -���<3��<�

z��+

����� �_3k�*�C�R� ��� -���73��<�c��N 3k�*�i�"����3>�

template < typename NT , int z >

NT cplus(const NT& x) { return x + z; }

5.1.2 Template Arguments�������d`> -�����.� NL:.��`<30������#������V+0:;���.�����+2`> -�.� ��� ����<3��<��+v3��!+0:;p +G3���3�:;3��c3����%NL:���`<3������0y@+2NL�����d -� ��� -���73��<��+��)������� `> -������� NL:��.`73������ 30���6�.L �3�� # pi��+0��(���+�3���� `> -�%� ��� -���<3��<�0+����.� -�+0�+0:;���.�����+ 3����6�.L M3��R �����:�������3�+ 3�� +E:�p.+E30��3�:;3��R3���� 3��<�6� � �3��%� ��� ����<3��<��+<�

Page 200: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��]�] �_� ��� ����� �5 ��� � ��� � �U��� � �3�����?� ���

;��� 3k���C� 3��<�6� � �3�� � ��� -���73��<� #C3���� 30���6�.L �3�� ��0��:.���<��3 �. -+"3��pC�6 d3k�*�C�z 3�����+ 3k���C���+ :.+E��( ���w -��� �.L -`���&%���<��� 30�.� 3����6�.L �3���� ��� ����<3��<� ����C�> ��0+6���43����ZNL:���`<3������430���6�.L �3��(��<T.����3������y�

;���� ����� �_3k���C�Z3����6�.L �30�� ��� ����<3��<� # 3����Z3��<�6� � �3��Z M����:�������3 � �+63�� pC� `�����+E3� -��3�7u*�.�0��+0+0����� ��Nj3���� `����0�0��+E�C����(������ 3k�*�i�z 3���� a- -�:��D��Ng3�����+!� uF������+0+E����� ��+ :.+E��( ��� -��� �.L -`<�&V���<�0� 3����R3����6�.L �30�V� M�� -���<3��7�c ����C�> ���+c����30�.� NL:���`<3������3����6�.L �3��B(��<T.����3������n�bc���R����+0:��3c��N +0:;p +G3���3�:;3������ 3��<�6� � �3��%� ��� ����<3��<��+ p��d3����6�.L �3��V �����:�������30+ ��+c�0��NL�<�0���<(�3��

-+D -� �/#0�>�J,.#0��� ,5���J!$# ��Nc3�����3����6�.L M3���� SH+E��������6NL:���`<3������ 3����6�.L �3�� �d �� pC�d����+E3� -��3��L �30��(�d -����3�������+��

Explicit template argument specification.AR��� &c ��U3��w+0:;�.�.��U30���6�.L �3��= �����:�������30+Z3���

NL:���`<3������ 3����6�.L �30� ��+Vp*� � &)(+*P�"�>��� �"(I�h�>� { �',5���J!$# #n -+R+0���M&%�=���<��� NL��� 3���� NL:��.`73������ 30���6�.L �3��cplus()

(��<T.����( MpC�Ma[�-�gb,���!������

std::cout << cplus <double ,2*3 >(6.5);��:;30�.:;3�+

12.5�

b����6�.L �30� M����:�������3�+D ��0��+E�C�<`���T.��(4�7u*�.���`���30�� -+ `������d �_+0�<� ��� M3���( ���+E3D����`����+E��( ��� -������!p��� �`�/[�73�+ #y+0:�`�� 3��. �3V30�.� � �_3�� ��3���� ��� 3�����+B���+E3V��+%3���� 3����6�.L �30�! ��0��:.���<��3V3���3���� ��� 3��3����6�.L M3�� � M�� -���<3��7�>��b,�.��+!���+G3!��Ng30���6�.L �3��D �����:�������3�+" ����C�> ���+"��� pC�<3k&,���<� 3����6NL:��.`73�������. -��� -��(���30+ e �E�������d � �5gj ��0��:.���<��3c���+E3��^_� ���0(.�7�BNL��� 6NL:��.`73������Z3����6�.L M3�� 30��d M3�`�� `> -�n&V��30� -� �7uF�.���`<��3���(��<T.����( 30���6�.L �3��

�����:�������3����+E3 #M3�����+ ��0��:.���<��3 ���+E3 �. -+�3��B�d �30` �"3���� NL:��.`73������0y@+n3����6�.L �3��v� ��� ����<3��<� ���+E3��� ;����7u; -�6�.�� #*��Ny30�.�B� �_3��d3����6�.L �30�X� ��� -���73��<� ��+, 3k���C�V� ��� -���<30�<� 3������ -�+0� 3����B��� 3�� �����:�������3�. -+"30� pC� d3k�*�i���d{*������� ����� # ��Ng3����D���_3�� 3����6�.L �3�� � ��� -���<3��<� ��+! ����� �_3k���C� � ��� ����<3��<� ��N3k�*�C�

T3������63����V��� 3��d �����:�������3g�. -+g30�!pC�B `�����+E3� -��3 �7u*�.�0��+0+0������&%�.��+E�%a� ��:��%��+ `<����a[�<�030��p.��

3��T�

5.1.3 Template argument deduction. ;���,��:;�,������3��L -��7u; -�6�.��

operator*#� -�d�7u*�.���`���3j3����6�.L �30�V �����:�������3 +E�i��`���T.`> �30��������+g�� M3����<�

`�:�� pC�<��+0������#� �+j3����X30���6�.L �3��c �����:�������32���+E3j����+0+0�<+g:;��3����Xa*��+0:. - ����C�> ��� ��.`<��� ^_��N -`<3 #�&,�`> -������3X�<a[��� :�+0� ���;T�u����3� M3������ -+%���

x * y#;p.:�3X����+E3��� -( &,� �. >a[� 3�� &X����3��

operator *<Rational >(x, y)5 ��> ���~��3�����+,��+X����3c&V�. �3,&,�R&c -��3>�$%�'&,�<a[�<� #���� �d -��� `> �+0��+ 30�.�7��� ��+n���V������( 3��X+E�C��`���N��!3����6�.L M3�� 3k�*�C�g �����:�������30+n� uF�.���`��~3��� #

-+B3����D`����6�.����<�B`� -�=(���(�:�`�� 3����D����3�����(���( 3s���C�DN������ 3���� ����a[�<� �E�������d - �6 �����:�������3�� ;�������+E3� ��.`<� #;���

Rational x(1,2);

Rational y(1,3);

std::cout << x * y;3�����3k�*�C���NXpC��30�z ��0��:.���<��3�+ 3�� 3�������C�<�� �30��� ��+

Rational� b,���<����NL������#j3�������.~� &c �� 3��

����+E3� ���3��L M3�� 3���� 3����6�.L �3�� ���i�<�� �3����RN��0��� �pi�Ma[� 3���d �3�`�� 3���� � ��� -���73��<��+(x,y)

��+B3���:�+0�

Page 201: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�5 � ����� � � � ��� ��� �?� �0� ��� ��];�

Rational -+ d3����6�.L �30� M����:�������3 NL��� 3����D3����6�.L �3�� � ��� ����<3��<�

NT��SV+"30�.��+!`�������`�� ��+!+0�

��p*a*����:�+ #F3�����+c��+,�7u� �`<3���d&V�. �3,3���� `����6�.����<�,(�����+X��� 3�����+c`> -+0�-�mn�73V:�+V(���+0`�:�+0+X���Z������� (��<3� -��n���'& 30�.��+% -:;3����d M3���`B(���(�:�`<3�������&,���E/F+%NL���X3k�*�C�!30���6�.L �3��

� ��� -���73��<��+�� bc���%`<���6� ����<� `�����+0��(��<�0+j��� 3�:;���6�> -`�����N 30�.� �E�������d - �B� ��� ����<3��<��+ ��N 30�.�,3���� ��.L �3�� NL:���`<3������ ��.(D� -����+ �~3�+ 3k�*�C�

Ti&%��3�� 3���� 3k�*�C�

Ai��N�3���� `����0�0��+E�C����(������R`> -�*� ��� -���<3��<���

5 ���.+E��(��<� #;NL���V���.+G3� -��`�� #F3���� NL:��.`73�������3��<�6� � �3��

template < typename T1 , typename T2 >

void foo(const T1 x, T2& y) { ... }

-��(�3���� +E3� �30��������3

const int k = 1;

double l = 1.5;

foo(k, l);

^_� 30�.��+c`� -+0�B3����"`<���6� ����<�gp.:����(�+ 3����B� -����+beconst T1

#const int

g NL���X3����BT���+E3,� ��� -���73��<� -��( e

T2&#double

g NL���X3���� +0��`�����(Z� ��� ����<3��<�>�^_� 6+0�<`�����( +E3��<� #i3���� 3k&,�3k���C��+R��� �> -`�� � -��� M���D -(�rG:�+E30��( ��� ����(��<�R3�� -(�(;����+E+

const�*:. -���T.�<��+c -��(�����NL�7������`���+B M�.������������ �3�����[�� ��~��+E3% �C��30����3��� -const

��:. -���T.�<�c���3����"3����6�.L M3��� ��� -���73��<��3k���C� ��+v(���+0`> M��(���(y� e b,�.��+ +0���03 ��N�`����0�0��+E�C����(�+v3��R -�D�a� ��:����_3���� �0a- -�:��g`�����a[�<��+0�����n� gb,�.�<��3����<���! ����R3s&,� `> -+0�<+X3��D`�����+0��(��<�>�

���c^_NTi��+ Z����NL�7������`�� 3k���C��3������ 3�����3k�*�C��&%�.��` �

Ti���<NL�<��+ 3�� ��+D:�+0�<(zNL���D(���(�:.`73�������#

3��. �3D��+ #j3����&��+D(���+0`> ��0(.�<(n�Ce b,����+D��+ (.���������+E3���=3��=�> �+0��NL:;�03����<� (���(�:�`<3������y� SV+

�`<���6�C����+� �3������ #y3�����(���(�:�`���( 3����6�.L �3��D ��0��:.���<��3 �d �� pC�const

��:. -���T.��( L M3��<� ��N����`��<+0+� ��0�[� g

�*�c^_NTi��+% D�.��� � ����NL�<���<�.`<�!3k�*�C� 3������ D�i��3�����30�L -

const�*:. -���T.�<�c��N�30�.�"`> -�C� ��� ����<3��<�

3k�*�i����+ (���+0`> ��0(.�<(n� e b,����+!����! �<`<3�+ 3��. �3 `�����+E3�����+E+D��+ �.�0��+0�<�0a[�<( p*� 30�.��`� -��� p*� � a� ��:��+0�<�d -��3���`�+c -����> �(��[� g

5 ����3�����:��������:;�!�7u� -�6�.�� N��0���e �pC�'a[� #y3���� 3k&,� � -�~��+ ���� 3E�� -��+0NL��������( ����30�2eT1#int

gR -��(eT2#double

g7�SV+ 3�������( -��( L -+E3B+G3��<� #CNL��� �> -`�� � -�~�V3���� `����6�.����<�c30�����<+V3��d�d �3�`�� pC��3�� 3k�*�C��+fe 30� M3

��+ #.�d �/[�R3������ ��(.�<��3���`� - ggp*��+0�����`73������� ��������������L �30�R30���6�.L �3�� �����:�������3�+cNL���ie_+0����� ��N<g 3����3����6�.L M3��V3k�*�C� � M�� -���<3��7��+��2bc����+c(���(�:�`<3������ ��+c�i��+0+0��p.�� :��.(��<�X`��<�E3� -���Z`<���.(���30������+��� ����X��:;��.:;�0�C��+0��+c���<��� #�3����<���" ����R3k&,� ���<��<a- -��3X`> -+0�<+��

���cb,���,3E�� -��+0NL��������( 3k�*�C�,��N�3����,NL:.��`<30�����0y@+vNL�����d -�� ��� -���<30�<� e 3���� T���+E32��3��<� ��N 3���� � -��� g��+R��N23���� NL�����

TPi#n&%���<���

TPi��+"����� ��Nj30�.�DNL:���`<3������0y@+B3��<�6� � �3��!� ��� ����<3��<��+<� bc����+

���6�.�����+g3��. �3TPi

��+c`��.��+E���Z3�� pi� 3����R3k�*�C� ��3c��+,� �������( :���&V��3��y�

�*�cb,���,3E�� -��+0NL��������( 3k�*�C�,��N�3����,NL:.��`<30�����0y@+vNL�����d -�� ��� -���<30�<� e 3���� T���+E32��3��<� ��N 3���� � -��� g��+2��N 3����cNL�����

TPi*#[&V���<���

TPi��+j�����c��N 3����cNL:.��`<30�����0y@+ 3����6�.L �3�� � ��� -���<3��<�0+��v^_� 3�����+

`> �+0� #*3����X(.�<(.:�`<30������+0:�`�`����<(.+ ��Ny -��(����.~� ��N 3����%3k�*�C�TPi*

��+j� -�~����(�:;�d&V��3�� ��+g��Ni3����NL�����

T*NL���X+0�����B3s���C�

T -��(�#;�.�<�.`<� #

TPi��+c`�����+0���Z3�� pC�

T�

Page 202: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��] � �_� ��� ����� �5 ��� � ��� � �U��� � �3�����?� ���

^_� ��:��B�0:.�����������7u; -�6�.�� # pi��3�� ` ������`<��+RN -� ��� `> M3��������0� ����� � eT1#int

g%+E:.�����<+E3�+B3��d+0�<3T13��

int -��(2e

T2#double

g,+E:.�����<+E3�+X30� +0�<3T23��

double�

����. -�~� #*3���� &%������B3����6�.L �3��R M����:�������3,(���(�:�`<3������ +0:�`�`����<(.+%��N -��( ���.~� ��N

��� 3���� (���(�:.`73�������+E:.`<`�����(�+VNL���X�> -`�� +0��������B3k�*�i� � -���>z

�*�,NL���D�> -`�� 3����6�.L �3��D� ��� -���<30�<�D �3����6�.L �30�6 �����:�������3 ��+ (��<3��<�0��������( p*� �3 ��� -+E3 ������ -���>z� -��(

8F� 3����c3����6�.L �3��c ��0��:.���<��3�+2`��.��+E����p*� -�;3�����+0�%� -�~��+ ��0�%`�����+0��+G3�����3 #�3��. �3g��+ #[3����<���X��+g���3��<�6� � �3��V� ��� -���73��<�,NL���c&V����`���3k&,�D� -�~��+X(��<30�<���������B(���hi�7������3c3����6�.L M3��R �����:�������3�+��

Examples.SV+% ��.��30�.�7�X� u� -�6�.�� #*��<3X:.+c+E&%��3�`���3����R3s&,� �����:�������3�+ N������ �pC�'a[���

foo(l, k);

b,�.� 3k&,�c3k���C�2� -�~��+n �����econst T1

#double

gC -��( eT2&

#const int

g7��bc���2+0��`�����( +G3��<� ���<(.:�`��<+3������ 3�� e

T1#double

gd ��.(OeT2#const int

g &V����`�����> -(�+�3�� +0:�`�`���+E+0NL:�"(���(�:�`<3������w&V�~3��3����6�.L M3��R �����:�������3�+

<double,const int>�

^_� ����(��<�3��z����:�+E30�� M3�� ���M& 3���� (���(�:.`73������ `� -� N -�� #V`�����+0��(��<�d3���� NL�����'&V����� NL:��.`73������3����6�.L M3��

template < typename T1 >

void bar(T1*, T1 ) { ... }

-��(�3���� +E3� �30��������3

int* i = 0;

unsigned int j = 2;

bar(j, i);

b,�.� 3k&,��3k�*�C� � -���0+B ���� eT1*

#unsigned int

gV -��( eT1#int*

g7� b,�.� (���(�:�`<3������ N ����+BNL���B3����T���+E3c� -���X -��(�#F3����<����NL������# -+X &V������BpC��`> �:.+E�

unsigned int��+X����3X �C������30�<�X3k���C���

�g:;3V -�+0� ��N &,�!� u;`��. -����� pC��30� �����:�������3�+ 3�� �0�> -(

bar(i, j);

3����%(���(�:�`<3�������N -���+�� b,���X3k&,�!3k�*�i�%� -����+j ����seT1#unsigned int

gj ��.(ReT1*

#int*

g7� ;��� �> �` �+0��������"� ����V3���� (���(�:�`<3������ +0:�`�`��<��(�+�� �g:;3B3���� T���+E3B� -�~�B+0����<`<3�+

T130�dpi�

int#i&%���<���> -+V30�.�

+0��`<���.(D� -��� +0�����`<3�+T13��RpC�

unsigned int� b,����+0�,`��.����`���+2 ����,����`�����+0��+G3�����32 ��.(�#�3����<���<NL����� #

(���(�:�`<3������dN -���+�� X��3��V3��. �3 30�.��+ N -���:;���V��+ ��� +G� �~3��V��Ny3���� N �`<3 3��. �3,+0�<3E3������T13��

int&,��:.�(

����+E:.~3 ���� �d �3�`��������"NL:���`<3������6(�:.�X3��!3����%���6� ���`���3v`<����a[�<��+E������N������unsigned int

3��int

Watch out!QB������3V����~�Z��� ���6�.���`<��3,`�����a[�7��+0������+B���Z3���� `<����3��7u*3R��NvNL:��.`73������ 3���� �

�.L �3���+<�

Page 203: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�5 � ����� � � � ��� ��� �?� �0� ��� ��]�8

5.1.4 Overloadingb����6�.L M3�� NL:���`<3�������+D -�+E� �. �a[��3�� pC�d`�����+0��(��<����( (�:��0����� �'a[�<����[ -(������Z����+0���:;3������ #v+E���Z{*�<`��3������ ?;�������>]F� {*:;���C��+0��&,�Z(���(��0y 3 ���<�.L -`<����:;�6�����<a*����:�+

operator*NL���6�� �3������ �X��:.� pC�<�0+

&V�~3��30�.�B3��<�6� � �3��%a[�<�0+0������p.:;3c+0���6�.�� -(�(.�<( 3����R3����6�.L �3��Xa[�<��+0������ -+X -����3����<�,�Ma[�7����[ -(���(operator*

� b,�.��+6&,���0/F+ #Xp :;3d�����D:.~3����.��F���.� 3k&,� �� �3������. -X�*:��Dpi�<��+ #c3���� ����� �_30���6�.L �3�����C�<�� �3����!&,��:��( pC�6`�����+0���y��b,��� �������<�� -j��:��� ��+"30�.��+ � ��N, d3����6�.L �3��D -��( ������ �_30���6�.L �3��NL:���`<3������4��> -(z3�� 3�����+� -���d�d �30` ������� �*:. -��~3s� ��� -� � ��� -���73��<��+ #23������43���������� �_30���6�.L �3��NL:���`<3������ ��+cpC�<3030�<�>�,b,�.��+%�d �/[��+X+0����+0� � 30�.�!�.��� � 3����6�.L �3��BNL:���`<3������ ��+%+E�i��`���T.`> -���d(���+0��������(NL���X`��<�03� �����3k�*�C�<+ #;&V������V3���� 3����6�.L �3��Xa[�<��+0��������+X�����0� ���<�.�7�� -_�

5.1.5 Scope restrictionmy�*��/F���.� M3D30�.��3��<�6� � �3��� ��0��:.���<��3 (���(�:�`<3������ ��:����+ # �[��:z+E�.��:��( ���M& pi� +0`� �����(zp�� 3����operator*

3��<�6� � �3��X&,�R(��<T.����(���� 3����BpC��������������� ��Ny3�����+ +0��`<30�����y�gb,����+ NL:��.`73������ 30���6�.L �3��(��<T.����+ �D:��3����.���`> �3������ NL��� -��� ��0p.��3E�� ��0� 3k���C��� ^ 3 �d �3�`�����+ �<a[��� ������+0����+0��`� - +E3� �30��������30+���/[�

std::cout * std::cout;

��� M3 �. ����C����+!���=3�����+ `> -+0�'� ^_�.+E��(�� 3���� NL:���`<3������=pC�*(;� 3����*=���C�7�� �3����"NL���!3����D3s���C�

NT��+V:�+0��(y�cSV+%3�����+X���C�<�� M3����V(��*�<+V����3V�7uF��+E3B���Z3����!3k���C� ��N

std::cout# 3���� `����6�.����<�,&V���

+E3���� �3X30�.��+,�i������3,&V�~3��� ��Z�<�0�����%����+0+� ���� ���/[�

error: no match for ’operator *=’ in ’r *= y’

K :�3E3������"+E:.`��d �������<�� -����C�<�� �3����j����3��"�����p -;+0`����i�%��+ #�3����<�0��NL����� #�+0�����<&V�. �32(. -�����<����:�+�� �=�������( &c �� 3�������+G30����`<3!3����6 ����.���`> Mp �����3k�Z��N 3�����+"���C�<�� M3����!&%��3�����:;3"���<+E30����`73���������30+!�������<�� �:�+� �p.����~3s� &V���<�0� ��3���+�(���+0�~����(y� ;���d�7u� -�6�.���#c�~36&,��:��(4pC� ����`���3�� ���<+E30����`73�3���� ���C�<�� �30���3����6�.L M3�� 3�� �d �30` � ������=���z ��0��:.���<��3 3k�*�i��+ &V����`�� +0:;�.�i���03 3����

*=���C�7�� �3����>� $X�M&,�<a[�7� #

3����<��� ��+c��� �> -+G� &c ��d3��D(.�D3�����+,&V��3������d3����!5XW W �_+E�F��3� Mui��g:;3 3����<�0�=��++0�����<3�������� &,�=`� -� (�� �zK :;3�3���� NL:��.`73������ 3��<�6� � �3�� ����3��z �. -����+E� -`<�

3������<30�.�7�2&%��3�� 3�����+0�,`�L �+0+0��+v&V����`�� &,� &c -��3v3��" ����.�� ��3v30�;� SV+v&,� � :;3j -�*��:�� �d M3������d �3���`� -3k�*�C�<+� -��( NL:��.`73�������+ ����3�� 30�.� �. -����+E� -`��

mystd# &,��&%���, -�+0� (�� +0� NL��� 3����

operator*NL:���`<3������=30���6�.L �3���� �c��`> -�v3��. �3"(�:�� 3��� �����:�������3 (��<�C�<�.(�����3 �. -���D��*��/*:;�=3�����+ NL:��.`73������&V���cpi� NL��:.��( &V�������<a[�7� -� ��p.rs��`<3d M�.�i�> ���+� �+d =`> -�X� M�� -���<3��7� &V����+0� 3s���C� ��+6(��<T.����(�����. -����+E� -`��

mystd� SV+d`�����+0� �*:�����`�� #%30�.� +0`<���C� ��N!��:;�d�������<����` NL:���`<3������w3����6�.L M3�����+

���> �+0���. �p.�� �0��+E30����`<3���(y� ^_�4� M�03���`�:�L M� #g��3 &V���c����3 ����3��7��NL�<���Z&%��3��4��p.rs��`<3�+6���/[�std::cout&V����+0�R3k�*�C� ��+c(��<T.�.�<(Z�����. -���<+E� -`��

std�

5.1.6 Documenting requirements^_��(��<�C����(�����30�� N������ 3����c �pC�'a[�X(���+0`<:.+E+0������#���3 ��+2 B���*��( ��(��> %3�� (��*`�:�������3v3���� ��� �*:����0��������30+NL���d3����6�.L �30�Z �����:�������3�+ #vrs:�+E3 -+�&,� (��*`�:�������36�������4 -��(��i��+E3 � `<���.(���30������+6NL���dNL:��.`73�������+&V�~3�����:�3 pi������� Mp ��R30� `����6�.��<30���������NL����`<�"3������HN������ 5cW"WY�C������3c��N a*���<& �

Page 204: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��]�? �_� ��� ����� �5 ��� � ��� � �U��� � �3�����?� ���

��� M32 ���� 3�����+0� ��� �*:����������<��3�+ NL��� 3����operator*

3����6�.L �3��>� �g�<+0��(���+v3����*=���C�7�� �3����v���

%b #F -�+0� 3����B`����*�d`<���.+G30��:�`<3����,���NT��+ �.�<��(���(�#;NL���,���.`<� #F���d� -+0+0����� 3����BNL:���`<3������0y +g���<3�:;���

�����:�������3R -��( ��+0�d��� 30�.� ������30�L -�� � �3������ r = x� b,�.�<+0�D�0� �*:������<������3�+B`� -� pC� (��*`<:.���<��3���(

-+cNL�����'&V+��

namespace mystd {

template < typename NT >

NT operator *(const NT& x, const NT& y)

// POST: return x * y

// Required:

// 1) copy constructor NT(const NT&);

// 2) multiplication assignment NT& *= const NT&.

{

NT r = x;

return r *= y;

}

} // namespace mystd^_�=3�����+B&c �� ��3 ��+ `����6�.��<3���~� +E�C��`<��T.��(=&V����`�� 3����6�.L �3�� �����:�������30+R30�.�DNL:���`<3������=30���6�.L �3��`> -� pC�"���.+G3� -��30�L �3���(d&V�~3��y�bc���,NL:���`<3������

powN������t{*��`73������68F��� ��+ -����3����<� ���*��( `� -��(.��( M3�� NL��� pC�������$�G3����6�.L M3�� � ��( �;�

�g:;3g���6(��������"+0� #[&,�%+E�.��:��(D30�0�D3��"/[�<�<��3����X��� �*:����������<��3�+ ��N 3����XNL:.��`<30����� ���������d ����� ����(��<�3��6�d M/[�!��3V ���� ���`> �p.��R��� -+%�d -��� +0��3�:. �30������+X �+%�C��+0+0�~p ����XAR:;�V�����<a*����:�+

powNL:��.`73������Z&c -+

�p.���30� `<���6� :;3��be -�+0� NL���d�����[ M3���a[� ����3������<��� uF�C��������3�+ e

#,p :;3d���w����(��<��30� (.� +0� #,&,�������(���(d(���aF��+0�����?e �0��`> -��3��. �3

be = (1/b)−e �j{*����`��X�.��3 -��`�����`�����a- �p.��V��:��DpC�7�j3k�*�i��+ �. �a[�B e �������C�7�'g (.�~aF��+0������v�30�.�V3k���C�

int(�����+0�0y 3 #�NL���X����+E3� -��`�� v ��:��,3��<�6� � �3��Va[�<��+E�����Z��N

pow������

&,���0/*+ NL���v�������.�<�[ �3���a[�j�7uF�C��������3�+�� ^_NF3����g3k���C�NT&,� ���� :�+0���.�%��3 NL���v+E�.��:��(D -���M& (���a*��+0������+ #

&,�V`> ��+G3���� ���<3 �����[ �3��~a[�X�C�'&,�<��+ 3��;����:����63����VNL���0� :�L be = (1/b)−e #�p :;3 &,�%(.���0y 3 ������(�3��

��� ��:������" D(���a*��+0��������C�<�� M3����>�2$%�<��� ��+,3���� �0��+0:��3������DNL:��.`73������ 30���6�.L �3��BNL���pow

template < typename NT >

NT pow(const NT& b, unsigned int e)

// POST: return value is b^e

// Required :

// 1) constructor NT(int);

// 2 copy constructor NT(const NT&)

// 3) multiplication assignment NT& *= const NT&.

{

NT result = 1;

// maintain bpow = b^(# completed iterations)

for (NT bpow = b; e != 0; e /= 2) {

if (e % 2 == 1) result *= bpow;

bpow *= bpow;

}

return result;

}

Page 205: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�5 � ����� � � � ��� ��� �?� �0� ��� ��][I

5.1.7 Exercises

Exercise 77r !$#0�h�"B �>= �V�;��KL!.*/* !$13�[#;@ Kh:4# � ���"!$#U�<�>89(+* ,5�<�LW

template <typename T, typename S>

S foo (T a, T b, S c) {

return c*a*b;

}

\ ���J� � ! KX�V�;� KL!.*/* !$13�[#;@ �',5*/*P�X8�,5�<�>�M�V������K�:4# �>���J!$#C�<�>89(+* ,5�<�>Ak,.#�BR13���J� �2��D (I�>�Y,.=>�B �hB.:u���'BiK�!$=

T,.#�B

S�

, foo(2, 3, 4)

S foo(2, 3, 4.0)

� foo(2.0, 3, 4.0)

B foo(2.0, 3.0, 4.0)

� foo(2.0f, 3.0, 4.0)

Exercise 78\ = ���<�F,bK�:N# � ���J!$#]�<�>89(+* ,5�<� KL!$= ��!$89(0:;���/#;@��V�;�i8G,�&5�/8Y:48 ! Ks��1b! #I:48�S��>=)��A

,.#�B �<� ��� ��� KL!$= #I:48GS>�>=)�Y! K ��D)(I� �int

Adouble

,.#�BRational

W � !�>:N82�>#0���V�;�X=>� � :4�/=�� H82��#0�V�Y! KfDN!$:N=�Kh:4# � ���"!$#IA�,.#�BR��= DG�<!?Zw�h�J( �V�;� ���9=>� � :4�[=>�>82��#0�V�6,5�X* !$1 ,5��(I!.�>��� S)* � �

Page 206: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��]�P �_� ��� ����� �5 ��� � ��� � �U��� � �3�����?� ���

Page 207: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Appendix A

C++ Operators

Description Operator Arity Prec. Assoc.+0`<���C�

::� �># ��������3

+0:;p.+0`<�0����3[]

� �'o ���N�3NL:���`<3�������`> -�

()� �'o ���N�3

`�����+E3E��:�`<3������ �������()

� �'o ��������3����� pC�<�c �`�`���+0+

.� �'o ���N�3

����� pC�<�c �`�`���+0+->

� �'o ���N�3�C��+G3 � ����`<�0��������3

++� �'o ���N�3

�C��+G3 � (���`<�0��������3--

� �'o ���N�3(;�F�. -����`B`> -+E3

dynamic_cast<>� �'o ��������3

+E3� �3���`R`> -+G3static_cast<>

� �'o ��������3���<����3��7�0�����<3X`> -+E3

reinterpret_cast<>� �'o ��������3

`�����+E3X`> -+G3const_cast<>

� �'o ��������33k�*�i�"��(�����3���T.`> �30�����

typeid� �'o ��������3

�������_����`<�������<��3++

� �>P ��������3�������_(���`<�������<��3

--� �>P ��������3

(��<���<NL�<������`��*

� �>P ��������3 -(�(;����+E+

&� �>P ��������3

p.��3k&V��+0�R`����6�.���������3~

� �>P ��������3�������`> -C����3

!� �>P ��������3

+0�����+

� �>P ��������3+0�����

-� �>P ��������3

+0� � ����Nsizeof

� �>P ��������3���<&

new� �>P ��������3

(�����73��delete

� �>P ��������3`> �+E3

(�������

)� �>P ��������3

����� pC�<� �i������3��7�->*

� �'I ���N�3����� pC�<� �i������3��7�

.*� �'I ���N�3

���>�

��][o

Page 208: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

��]�# � ��������k� � �i � ��� �3�����3� �"���

���>��D:��3����.���`� �3������

*� ��? ���N�3

(���a*��+0�����Ge_����3������<�'g/

� ��? ���N�3����(.:��:�+

%� ��? ���N�3

-(�(���3������+

� �>8 ���N�3+0:;p�30�� �`<3������

-� �>8 ���N�3

��:;30�.:;3��-���N�3c+0����N�3<<

� � � ���N�3���;�.:;3�����������3,+0����N�3

>>� � � ���N�3

��<+0+<

� ��� ���N�3������ �3��<�

>� ��� ���N�3

��<+0+X� �*:. -<=

� ��� ���N�3������ �3��<�X� �*:. -

>=� ��� ���N�3

� ��:. -���3k�==

� �>] ���N�3����� ��:. -���3k�

!=� �>] ���N�3

p.��3k&V��+0� -��(&

� q ���N�3p.��3k&V��+0�Vu;���

^� # ���N�3

p.��3k&V��+0�R���|

� o ���N�3�������`> -y -��(

&&� P ���N�3

�������`> -C���||

� I ���N�3 -+E+0������������3

=� ? ��������3

�D:��3c -+0+0�����.���<��3*=

� ? ��������3(���a -+0+E������������3

/=� ? ��������3

����(� -+E+0������������3%=

� ? ��������3 -(�( �+0+0������������3

+=� ? ��������3

+0:;p �+0+0������������3-=

� ? ��������3��+E�.��N�3V -+E+0������������3

>>=� ? ��������3

�+E�.��N�3% �+0+0������������3<<=

� ? ��������3 -��( �+0+0������������3

&=� ? ��������3

uF���V -+E+0������������3^=

� ? ��������3���% -+0+0�����.���<��3

|=� ? ��������3

+0�<���`<3������?

8 8 ��������3�7uF`��<��3������

throw� � ��������3

+0� �*:�����`������,

� � ���N�3

Table 7:a =>���h�hB �># �h� �6,.#�BG,5�>��!�>� ,5���/p�/��D ! K rbtXt !>(;�>=)H,5�<!$=)�LW

Page 209: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

Index

�3�����+ #y�'I�8 #y�'o-?

-`�`<��+0+%+G�C��`���T.�<�������a- �3�� #y�'I-?�.:�p.���` #C�'I-?

SV`�/[�<���d ��.� NL:��.`73�������#y�>8�# -(�(���3������ -+0+E������������3,���C�7�� �3���� #;?�I -(�(���3���������C�<�� �3���� #;? �

-(�(;����+0+ # ��?��Nv a� M���L �p.�� # ��8��Nv -� ��p rs��`<3 # �-?

-(�(;����+0+X���C�<�� M3���� #y�'o�8 -�30�<���. �3��R(������L - #FP�? -��3���a- -�����`�� #�P�? ����.���`> M3����������������� -� #;# �����:�������3 � (��<�i����(.�<��3c��*��/*:;� #i�>P�] #y�>P�PS%���~3������<3���`B1va- -�:. �3������ �X:��� � #�8[oS%���~3������<3���`B1va- -�:. �3������ �X:��� � #�8[oS%���~3������<3���`B1va- -�:. �3������ �X:���"8 #;?[] ����~3������<3���`V� uF������+0+E������# �-? ����~3������<3���`V���i�<�� �3����0+ #;? �

����~3������<3���`%3k���C� #.8�P ����~3s� # ��o -+0+E�<�03�������#y�'I�I -+0+E������������3,���C�7�� �3���� # ��o

:�+0�<� �_(.�7T ����(�# �>#�# -+0+E�*`��L M3���a[�R���C�<�� M3�������#;8[o -+0+E�*`��L M3���aF�~3s�

���N�3 #.8�#��������3 #�8�#

-+0+E�*`��L M3���aF�~3s�6��N����C�<�� �3���� #�8[o -:;3����d �30��`V+E3����� -���"(�:;�� �30������#�o�#

p -+0�

��Nv !.�[ �3������ �C������3c�*:��Dpi�<�c+E�F+E30��� #y�>]�]p.���. ��0�d� uF� -��+0�����

��N �. �3�:;�� �C�*:��Dpi�<� #.I�]��N����� -y�*:��Dpi�<� #y�>];�

p.���. ��0�d���i�<�� �3���� # ��op.���. ��0���0�<������+0����3� �3������

��N ����3,a� -�:.��#.IF���N :���+0��������( ����3,a- -�:�� # IF�

p.���. ��0� �_3����_(���`����d - `�����a[�7��+0������# I�]p.��3 #y��?p.��3k&V��+0�R���C�<�� �30����+ #�P�?p.���`�/ #.o-?pC��(;�

��N (���� +G3� �3������<��3 #;#;���N NL��� �_+E3� �30��������3 #�oF���N NL:���`<3�������#y���>P��N�&%�.������ +G3� �3������<��3 #*o�q

pC���� #�I�q�g������> -� NL:.��`<30������#.I�P

`����6�.��<30������+0+ #.I�op����> M/ � +G3� �3������<��3 #�# �

p.:�� # o�Ip.:����3 �_���d3s���C� # � �

p.:;��+E3 #�?[P

5cW"W +E3� -��( M��(�# ��]`> ��C� M�� -���<3��7��+ #C���'o`> ��y+E3� -`�/ #n�>8�8`> ����_p�� � ����NL�<���<�.`<� #��>P �

`> ����_p�� � a� -�:.��#y�>P �

`> ��.`<���L �30�������� ! �[ M3������ �C������3c`����6�.:;3� �30������+ #i�>][o

`> �+E3 e NL:.��`<30�����. -C����3� �3������Ng�#Fq�#`��<��30�� �n������`���+0+0���.�D:�����3kek5cK ��g�#n��?

��]�q

Page 210: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�F�>] � � � � �

5 �*:;��`���#.S%���� � �Ye0�>q�]�8 � �>q�q[I$g�#;#[o`�L �+0+ #n�'I�]

-`�`��<+0+%+E�i��`���T.�<� #n�'I �

`�����+E30��:�`<30��� #n�'I-?`����*� `�����+E30�0:.`73���� #y�'o�o(. �3� ����� pC�<� #C�'I �

(��<T.�.�~3�������#C�'I �

(���+E30��:�`<30��� #n�>#�P���6�.���������3� �3������ #��'I �

����� pC�<�,(���`�L M�� �3�������#C�'I �

����� pC�<�,NL:���`<3�������#y�'I�8������a- �3�� �����Dpi�<� #i�'I-?�.:�p.���` ���<�DpC�7� #i�'I-?

`�L �+0+X+E`����C� #n�'I �

`�L �+0+c3k���C� #n�'I �

5 ���L �3 � ������p.��<� #�o�q5 ���L �3 � #;mn��30� M� e0�>q;�>] � �>q�q�].g�#;#�q`�����������3 # ��]`����6�.��L M3�������#.�>8

+0�<� ��� M3�� #n� �F�`����6�.����7� #i�>8`����6�C��+E��3��B�7u*�.�0��+0+0������# �-?`����6�C��:���(+E3� �3��<������3 #;o-?`�����(���3������

��Nv &V�������� +E3� M3���������3 #;o�q��Nv -� ��N�� +E3� �3���������3 #�P�q

`�����(���3������. - ���C�<�� �30��� #�#�q`�����+E3

`����0���<`<3�����+0+ # �>#;������ pC�<�,NL:���`<3�������#y�'o�q�C������3��<� #y�'o�#����NL�<�0����`�� # �'o�q����NL�<�0����`��!3k�*�C��# �'o�q&V��� :�+0�"��3 � #y�># �

`�����+E3 � �*:. -��~T �<(3k�*�i� #n�'o�o`�����+E30�0:.`73���� #n�'I-?

`����*� #n�'o�o #y�># �

(���N -:��3 #y�'I�P�7uF�.���`���3,`> -� #y�'I�I������3��L ��� � �<� # �'I�I

`�����3����*:����_+E3� �30��������3 #;#�8`�����30���� !.�M& #�P�q

��3��<�� �3�������#�o�]

rs:��6� #F#;�������> M� #;P�q+0�����`<3�������#�P�q

`�����30����y+E3� M3���������3 #.o�]`�����a[�<��+0�����

-��(�3��<�6� � �3���+ # ��] �

�7u*� ���`���3 #Fq�#!.�[ �3������ �C������3 #�q[o���6�.���`<��3 #[?[q����3������� - #F?[q����������3�������#*P�]:�+0�<� �_(��<T.�.�<( # �'I�P

`�������`<���.+G30��:�`<3���� #y�'o�o #n�># �

���6�.���`<��3 #.�'o�o #n�># �

`�������+E���d -��30��`�+(���N -:��3 #y�'o�o:�+0�<� �_+E�C��`<��T.��(�# �'o�o

5 ���*�+0���d ���3���`<+c(��<T.����3��������:����#y�>#[o5,K � # ��?

(. �3� ����� pC�<� #C�'I �

(��<p.:���������� ��:;30�.:;3 #.o�I(���`����d -��_30���_p.���. ��0� `�����a[�7��+0������# I�](���`�� ��� �3������ #F8�]

N������<�.(�#n�>q �

���`> - #�o�I��Nv `�L �+0+X���<�DpC�7� #C�'I �

��Nv NL:���`<3�������#n���>q��Nv a- ����L �p.���# ��8

(���`�� ��� �3������ +E3� �3���������3 #;8�](���`�� ��� �3��~a[�R�0����������#.o�P(���N -:��3c`�����+E3E��:�`<3���� #n�'I�P(��<T.����3������

��Nv `�L �+0+ #n�'I �

��Nv NL:���`<3�������#n���>P��Nv a- ����L �p.���# ��8

(�����73��"� uF������+0+E������# �>#�8(����������d -�� � ��(d�*:�� pC�<� #y���>](��<���<NL�<������`�� ���i�<�� �3���� #y�'o�8(���+E3E��:�`<3���� #n�>#�P(������<`<3���a[�

����`��:�(�� # �F�:�+0����� #�8�8

Page 211: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � � � �F���

(���+0`<�0�������. -��3��Nv �*:. -(;�� �30��`R� �*:. �3������ #y�>][o

(���aF��+0����� -+0+0������������3,���C�<�� M3���� #;?�I(���� +E3� �3���������3 #;#;�

pC�*(;� #�#;�(����d -���

��Nv NL:��.`73�������#n���'I(���:;p �� #�q[I(;�F�. -����`B+G3����� -��� (�:��� �3�������#C�>#�?QV�F�. -����` {�30���� -���!} :���(��������� # �>#�?

��(���3���� #y� �

�<h ��`<3��Nv +E3� �30��������3 # ��q��Nv -� �7uF������+E+0������# �-?

�<h ��`<3se +0���d -��3���`> - 3��<����g�# � �

����`> ��.+0:�L M3�������#C�>q�]1 :.`<���(��> -�� -���������30�.� # �>8�?�<a- -�:. �3������

��Nv -� �7uF������+E+0������# �-?+0�����03X`�����`�:���3 #�P;�

�<a- -�:. �3������ +0� �*:�����`�� # ?���7uF��`�:;3� �p.�� #n�>8�7uF��`�:;3�������# ��q�7u*� ���`���3,`�����a[�<��+0����� #.q�#�7u*�C��������3

��Nv !.�[ �3������ �C������3X��:��DpC�7� #y�>]�]�7u*�.�0��+0+0������# �-?

�����30�.���73���` # �-?`����6�C��+0�~3�� # �-?(�����<3���# �>#�8�<hi�<`<3V��N # �-?�<a- -�:. �3��������N # �-?�<a- -�:. �3������+0� ��:�����`�� # ?��NL:��.`73�������`� -� #y���'o���3��7�� - # ��8�a- -�:�� # ��P���~u;�<( #*?[q���<& #n�>#�8��N�3k�*�C�Ra[����(�#y� ��]����(��<�X��N �<hi�<`<3�+ #.?[P�������d ��0� # �-?�0a- -�:�� # ��P

3k�*�C� ��N # �-?a- -���(�# ��Ia- -�:��"��N # �-?a- ����L �p.���# ��8

�7u*������+0+0�����Z+E3� �30��������3 #�8�]�7u*������+0+0������30������# ?[] #y�'oF�

N -�+0� # I�q ��~pC���. -`�`��y�*:�� pC�<��+ #y�>8�PT.����3�� !.�[ �3������ �C������3c�*:��Dpi�<�c+E�F+E30��� #y�>]�]!.�[ �3 #�q[I ���[ �3������ K ������3 SX����3������<3���`%}R:���(���������"� #C�>]�? ���[ �3������ K ������3 SX����3������<3���`%}R:���(��������� � #C�>][o!.�[ �3����.� �C������3c`����6�.:;3� �3�������+

`> -��`��<�L �3������ # �>][o(���hi�7������3X+0� � ��+ #n�>][o� ��: ����3k��3���+E3 # �>]�?����� �3���a[�R�<�0�0��� #n�>] �

!.�[ �3����.� �C������3c`�����a[�7��+0������+ #.q[o!.�[ �3����.� �C������3c�*:�� pC�<�

(����������d -�� � ��(�#i���>]�7u*�C��������3 #n�>]�]���;T.����3k� #C���>]�d -��3���+0+� #C�>]�] % #y���>]�������d -�� � ��(�#i�>]�]+0������#y�>]�]+0��������T.`> ��.(�#C�>]�]

!.�[ �3����.� �C������3c�*:�� pC�<�c+E�F+G3���� #y�>]�]p -+0� #n�>]�]L ��0����+E3c�7uF�i���.�<��3 #n�>]�]������`���+0������#y�>]�]+0�d -����+E3,�7u*�C��������3 #y�>]�]

!.�[ �3����.� �C������3c�*:�� pC�<�,3k�*�C� #.q[I!.�*���cNL:���`<3�������#�q�#NL��� �_+E3� �30��������3 #.oF�

pC��(�� #.oF�������3 �_+E3� �30��������3 #;oF���3��7�� �3�������#�oF�3��<�0�����. �3�������#*oF�

NL�����d �i� M�� -���<3��7� #C���>PN��� �`<3� - #y��? �

N����<�!+E3����� -��� #n�>#�8

Page 212: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�F� � � � � � �

N������<�.(�(.�<`�L ��� M3�������#C�>q �

NL:���`<3������SV`�/[�<���d -����#y�>8�#pC�*(;� #y���>P`> -� #C���'o`> -�C� ��� ����<3��<��+ #C���'o`> -� �_p*� �_���<NL�<������`�� # �>P �

`> -� �_p*� �_a- -�:�� #y�>P �

(���`�L ��� �3�������#C���>q(��<T.�.�~3�������#C���>P(����d -����#i���'I�<hi�<`<3 # ���'INL�����d -i� ��� ����<3��<� #i���>PNL�����d -;� ��� -���73��<�j��N ����NL�<�0����`��B3s���C� # �>P �

�Ma[�7����[ -(������ #C�'I�q�C��+E3�`<���.(���30������#i���'I������`�����(���3�������#C���'I����`�:;��+E��a[� # �>8 �

����`�:;��+E��a[�!`> �� #C�>8 �

���<3�:;��� 3s���C� #n���>P���<3�:;��� a� -�:.� ��N����<NL�<������`�� 3s���C� #n�>P�8+0`����C��# ���>q+0`����C�"��N�NL�����d �i� M�� -���<3��7��+ #C���'o+0�����. �3�:;����#y� ��o3����6�.L �30� #i�>q�#a� ��:�� #n���'Ia[����(�#y���'o

;:��.`73������ � ��� -���<3��<�,� -+0+E�����D��:��� ��N�3���:��Dp #�>#�]

NL:���`<3������. -��~3s���Nv 3k�*�C� # � �

��Nv -� ���C�<�� �30��� # ��PNL:���( �������3� �i3s���C� # � �

�[ ��0p -���R`�������`<3������ #i�>q�8}" �:.+E+ # 5c ��0�� F�����<(��0��`�� #;o�8�����p -C+0`<���C� # o�P�����> M3���+E3X`����������d(���aF��+E��� #y�>8�?

�. -�3����.� ������p.���� #Fo � #.#[o�. �����������`B��:.� pC�<� #C�>][I���> -(��<�

T.�� #y� � �

��N�3���� +E3� -��(. ���( ���p��� ��E� # �F����> �� #n�>#�8����(������

��N �. -��� #;o�P

��(�����3���T.�<� # ��8^ 121j1 `����6�.��� -��`�� #i�>]�q^ 121j1 +E3� -��( M��( o�I-? #n�>]�8

����~3������<3���`V���i�<�� �3������.+ #C�>]�?(���:;p �� � uF3�����(���(Z������`<��+0������#y�>]�#+0��������R�7u*3�����(���(Z������`���+0������#C�>]�#a- -�:�� �� -����� #n�>]�8

^ 121j1 +E3� -��( M��(Z#[I-? #n�>]�#��N��_���+0��� +E3� M3���������3 #.o�]��N��_+E3� �30��������3 #;P�q

`�����(���3�������#;P�q���6�.��<������3� M3������6(��<T.����(�pC�<� �a*����� #y�>q���6�.��<������3� M3������6(��<T.����(Z+0�<�d -��3���`�+ # ��P���6�.���`���3 `<����a[�<��+E������#.?[q����`��:.(��R(�������`73���a[� # �F�

a- ����L -��3,&V��3��� -������Bp��� -`�/[�<3�+ # � ��8a- ����L -��3,&V��3��$�*:���3���+ # � �F�

���;T.����3��B������ #.o �

���;T.����3��V���<`�:;��+0������#n�>8 �

������30�L -�� � �3������p*� `�����+E30�0:.`73���� #y�'I�Ip*� � �<�0� # q�]��Nv a- ����L �p.���#�8�]��N `�����+E3X��p.rG�<`<3 #y�'o�#��N `�����+E3c����NL�7������`�� # �'o�q��N����<NL�<������`���+ #��>P;�

������30�L -�� � �<���Nv `�����+E30�0:.`73���� #n�'I�I

���;�.:;3c���C�<�� �30��� # ��#���;�.:;3c+E30���> �� # ��#����3 #�8�P����3������<�X(���aF��+0������#*?[8����3������<�X(���aF��+0��������C�<�� �30��� #;?[8����3������� �i3s���C� # I �

����3������� �C`�����a[�<�0+0������+ #.?[q^k{;A���^ 1g5 +E3� -��( M��( ��?[#�# � # ��]��30�<�� �3������ #;o�]��30�<�� �3������ +E3� �3���������3�+ #.o�]

Page 213: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � � � �F�>8

� �*:���a- -��<�.`<�"��N #.#�8

rs:��6�Z+E3� M3���������3�+ #;#;�

���N�3% -+0+E�*`��L M3���aF�~3s� #*8�#���p��� M�0� #C� ��8

+E3� -��(. ���(�# �F�my����(.�<�.�d ��[�<�,+G�F+E3��<� # �>8�q

-��.�. �pC�<3 #C�>8�qN��� -`<3� - #y��? �

���� ��.����`> -C����3��<�E�.�0�<3� �3������ #i��?[]������3��L � &,����(�#y�>8�q�����*(�:�`<3�������+ #i�>8�q

my����(.�<�.�d ��[�<� #FS%����+G3���(��fe��>q ��I � �>q�#[I$g�#i��?�I������> M�X`<����30���� !.�'& #�P�q����;/[�<� #y� � �

���30�<�� - # ��8pC�*�� #�I�q(���:�p.���#�q[I!.�[ �3 #�q[I���7u� -(���`<���d - #FI �

����3 #�8[o������ (���:;p.�� #y�>]�q�*`<3� - #�I �

:��.+E��������(�����3 #;?[q���`> -C(���`�L M�� �3�������#�o�I���`> -C+0`����i� # o�P�������`� -C���C�<�� M3�����+ #.I�q�������`� -i� �������3�����+0��+ #.8�#

��> -(������ ���C�<�� -��( #�8�#+0��`�����(. ��0� ���C�<�� -��( #�8�#

������D(.��:;p.�� #y�>]�q������D����3 #.I�8�����/F:;� #C�'I�q

�����:�������3 � (��<�C�<�.(�����3 #C�>P�] #n�>P�P������ #;o�]

���;T.�.�~3�� #�o �

������������+0+c3��'&c ���(�+ 3��<�������. �30������#FoF��a- -�:�� # ��P�a- -�:���� 3����_�0a- -�:��R`�����a[�<��+0������# ��o

�d -`��������B�<�.+0�������#y�>] �

�d -`��������BL -����:. -��� #y� �

�d -`<�0� #C�'I�I

�d -��� NL:���`<3�������# �F��d -��3���+0+0

��Nv !.�[ �3������ �C������3c�*:��Dpi�<� #y�>]�]�d �30�.�<�d �3���`> � ����(�:�`<3�������#C�>8[I����� pC�<�,NL:���`<3������ #y�'I�8

`�����+E3 #n�'o�q���������E��`���� #y��?���������E����> �/ #y�>#�?���<�0+0�������"����������+ #�q���~uF��(�7uF������+E+0������#�?[q����(.:�L M��� � �30������# � ��]����(.:��:�+, -+E+0������������3,���i�<�� �3���� #;?�I����(.:��:�+ ���C�7�� �3���� #;?[8�D:��3����.���`� �3������ -+0+0������������3,���C�<�� M3���� #;?�I�D:��3����.���`� �3������ ���C�<�� �30��� # ��o #�? �

�. -���`�L �+0��# �F�����(������ #�o�P��Nv `�L �+0+ #n�'I �

��Nv NL:���`<3�������#n���>P��Nv 3k�*�C��# � �

��Nv a- ����L �p.���# ��8��N NL�����d �i� M�� -���<3��7� #C���>P��N�3��<�6� � �3��%� ��� ����<3��<� #i�>q�q�*:. -���T.��(�# �F�:�� �*:. -���T.��(�# �F�

�. -����+G� �`�� # �F��. -����+G� �`��R+0`����C� # o�P���<&x�7u*�.�0��+0+0������#n�>#�8�������d -�� � ��( !.�[ �3������ �C������3c�*:��Dpi�<� #y�>]�]��:.�y�i������3��7� #C�'o-?��:.�n+G3� �3������<��3 # ��q��:.���7����`R�������30+

��N !.�[ �3����.� �C������3 3k�*�C�<+ #��>]�q��N ����3������� �i3s���C��+ #�?�o

��p.rs��`<3 # �-?��p.rs��`<3X`��*(�� #n� �F����C�<�Z+0��:;��`��"+0��N�3k&c ���� #n� ��8���C�7�� -��(�# ��P���C�7�� �3������ +E�*+E3���� ekA"{cg�# �'I���C�7�� �3����

Page 214: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�F��? � � � � �

-(�(���3�������#*? �

-(�(���3������ -+0+0�����.���<��3 #F?�I -(�(;����+0+ #n�'o�8 �����30�.���73���` #�? �

�����30�.���73���`B -+E+0������������3 #F?�I �����3k� # ��o -+0+0�����.���<��3 # ��o -+0+0��`��L �30��aF��3k� #*8[op.���. ��0� # ��op.����(.���.� #F8[op.��3k&V��+0��#;P�?`�����(���3������. - #*#�q(��<����NL�<�0����`�� # �'o�8(���aF��+E������ �+0+0������������3 #F?�INL:��.`73������. -C����3� �3������ #i�'I�oNL:��.`73������. -���3k� # ��P���;�.:�3 # ��#����30�����<�X(.�~aF��+0����� #�?[8�������`> � #;I�q����� pC�<� #C�'I�o���*(�:��:�+ #*?[8���*(�:��:�+, -+0+0�����.���<��3 #�?�I� :��30���.���`> �30������# ��o #;? �

� :��30���.���`> �30�����6 -+E+0������������3 #F?�I����� �_����� pC�<� # �'I�#���C�<�� ��.(�# ��P��:;30�.:�3 # ��#�Ma[�7����[ -(������ #C�'I�o�C��+E3 �_(���`<�������<��3 #;?�?�C��+E3 �_����`<�������<��3 #F?�?������� (���`7����������3 #�?�?������� ���.`7����������3 #;?�?������`���(�����`���# 8[o����L M3������. - #FI�q���<3�:;��� a� -�:.��# ��P+0:;p�30�� -`<30������#F? �

+0:;p�30�� -`<30�����Z -+E+0������������3 #F?�I:�� M�0� # ��o:�� M�0������*:�+ #F?�?:�� M�0�d� �:.+ #;?�?:�+0�<� �_(.�7T ����( �+0+0������������3 #C�>#�#

���C�<�� �3����,3���/[����# ��o�Ma[�7����[ -(���(�#�8�q

����(��<�X��N �<h ��`<3�+ # ?[PA { #��'I��:;30�.:;3c���C�<�� �30��� # ��#��:;30�.:;3c+E30���> �� # ��#�'a[�<����[ �(.���.�

-��(Z`�����+E3 # �>#;� -��(�3��<�6� � �3���+ # ��]�8 �����:�������3 � (��<�i����(.�<��3c��*��/*:;� #i�>P�]pC��+G3%�d �30` ��#y�>P�]NL:���`<3�������+ #y�'I�q��N ���C�7�� �3�����+ #y�'I�o����+E���:;3�������#C�'I�q

K21�ZQcSR{ #.8[o�.L �30NL����� #i�'I�C������3c��N�(���`�� ��� �3������ #;o�P�C������3��<�

`�����+E3 #n�'o�#������3��� -�� � M3�������#��'o-?�*:�� #C�'o-?3�����+ #y�'o-?3k�*�C��# �'o�8

�C���E3������ #C� �

�C��+G3 � (���`<�0��������3c���C�7�� �3���� #;?�?�C��+G3 � ����`<�0��������3,���i�<�� �3���� #;?�?�C��+G3�`�����(���3������

��Nv NL:���`<3�������#n���'I�C��30����3��� -C+0`����C��# o�P�������_(���`<�������<��3X���C�<�� �30��� #;?�?�������_����`<�������<��3c���C�<�� M3���� #;?�?������`<��(�����`�� ��N����i�<�� �3���� #�8[o������`<��+0�����

��Nv !.�[ �3������ �C������3c�*:��Dpi�<�c+E�F+E30��� #y�>]�]������`<���.(���30�����

��Nv NL:���`<3�������#n���'I������(���`� �3�� #�P;��������d M�0���7u*�.�0��+0+0������# �-?���������~3���a[�%���<`�:;��+0������#y�>8[o������a- �3�����#y�'I-?������(.:�`<30�����

��Nv my����(.�<�.�d ��[�<�c+E�*+E3���� #y�>8�q���������� ��H+G3� �3�� #n��?���������� ���������� L -����:. -��� #;#

Page 215: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � � � �F�'I

����������3�������#*P�]pC�*��C3��D����3 #�P�]!.�[ �3,3�� (���:;p.�� #�q[o

�.:;p ���` ��#i�'I-?

�*:. -���T.��( �. -����# �F�

�XS � #y��?�� -��(����H -`�`��<+0+%���������E�Re �XS �Rg�#y��?����`<:��0+0�����

���;T.�.�~3�� #C�>8 �

����������3��~a[� # �>8[o3� -�� � ����(�#C�>8�P

����`<:��0+0��a[�!`� -� #C�>8 �

����`<:��0+0��a[�!NL:���`<3������ #y�>8 �

`����0���<`<3�����+0+ # �>8[I3��<������� M3�������# �>8[I

����N �`<3���������� #�#�P����NL�7������`�� #��>P;�����NL�7������`��!3k�*�i� #n�>P;������ �3������. -i���i�<�� �3����0+ #.I�q����� �3���a[�R�<�0�0���

���$!.�[ �30����� �i������3c`����6�.:;3� �3������.+ #i�>] �

����+E�<�0a[��( �. -��� # ��8���<30:��0�Z+E3� �30��������3 #;8;����<30:��0��3k�*�C� #n���>P���<30:��0��a� ��:�� # ��P��������3X -+0+0��`��L �3��~aF��3k� #F8�#��:���30�����B�<�0����� # �'I�P�0a- -�:�� # ��P

+0`����i������p - #�o�P��*`� - #�o�P�. -����+E� -`���#.o�P��Nv (���`�L ��� �3�������#�o�P��Nv NL:��.`73������Z(���`�� ��� �3������ #i���>q����+E3E����`<3���������N 30���6�.L �3���+ # ��]�8

+0�������<��3� �30����� N �:.~3 #y�'o-?+0�����`<3�������#�P�q+0�����`<3������ +E3� �30��������30+ #.o�]+0���N��k -+0+E������������3 #i�>#�#+0���d ���3���`<+ #C�>q+0�<� ��� �3�� `����6�.��L �3������ #.� �F�

+0� �*:�����`��!�C������3 #F?[P{*���<h �<�V+E3E����/[� # P�?{*���<h �<� # $%���;�0���=�0e��>#�#�8 � �>q�P�?5g�#;P�?+0�����03X`����0`�:���3c�<a� ��:. �3�������#;P;�+0�����03X����3 #.I�8+0��(.� �<h ��`<3 # ��I+0�����

��Nv !.�[ �3������ �C������3c�*:��Dpi�<� #y�>]�]+0����� M3�:;���R��Nv NL:.��`<30������# � ��o+0�����.�<(Z`�� M� # I�8+0�����.�~T `� -��(

��Nv !.�[ �3������ �C������3c�*:��Dpi�<� #y�>]�]{*�������� ����(.�~T `� �3������ �X:����#.?[P+0��:;��`<��`��*(�� # �>8

�a� ���L �p.����~3s� # � ��8+E3� -��( M��(��<�E����� # ��q+E3� -��( M��(����;�.:;3 # ��#+E3� -��( M��(���~p.�� ��0� # �F�

�d �3������d M3���`> -.NL:���`<3�������+ #y� ��o+E3�(����@`��<�E� # ��q+E3�(����@`�����# ��#+E3�(����@`���:;3 # ��q+E3�(����@+ ���03 #y� ��P

+E3� -��( M��(���:;30�.:;3 # ��#+E3� �3���������3 # ��q

p����> �/ � +E3� �3���������3 #�# �

`����6�C��:���(+E3� �3��<������3 #.o-?`�����3����*:����_+E3� �30��������3 #;#�8`�����30����y+E3� �30��������3 #.o�](���`�L M�� �3������+E3� M3���������3 #;8�](���� +E3� �3���������3 #;#;��7uF��`�:;3�������# ��q�7u*�.�0��+0+0������+E3� �3��<������3 #�8�]NL��� �_+E3� �3��<������3 #.oF���N��_���+0���_+E3� �30��������3 #.o�]��N��_+E3� �3��<������3 #FP�q��3��7�� �3������+E3� M3���������3 #�o�]rs:��6�Z+E3� M3���������3 #;#;����<30:��0�Z+E3� �30��������3 #�8;�+0�����`<3������ +E3� �30��������3 #.o�]+E&%��3�`�� � +E3� M3���������3 #;#[o&V�������� +E3� �3���������3 #;o�q

+E3� �3���`R+E3����� -���"(�:;�� �30������#�o�#

Page 216: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

�F�>P � � � � �

+E3� M3���`Ba� M���L �p.�� #.o�# #�#�q+E3�(����@`��<�E� # ��q+E3�(����@`�����# ��#+E3�(����@`���:;3 # ��q+E3�(����@+ ���03 #y� ��P+E3����� -���"(�:;�� �30������#�o�o

-:;3����d �3���` #;o�#(;�F�. -����` #i�>#�?+E3� �30��` #.o�#

+0:;p�30�� -`73������Z �+0+0������������3,���C�<�� �30��� #;?�I+0:;p�30�� -`73����������i�<�� �3���� #;? �

+E&%��3�`�� � +E3� M3���������3 #;#[o+E�*��3� Mu #n�>q

3� -���� ����(d����`�:;��+E������# �>8�P3����6�.L M3��

-��(Z���6�.���`<��3g`<����a[�<��+E������# ��] �

-��(Z�'a[�<����[ -(������ # ��]�8 �����:�������3 #C�>q�q �����:�������3,(.�<(.:�`<30������# ��];��7uF�.���`���3c �����:�������3c+E�C��`��~T `� �3�������# ��]�]NL:��.`73�������#y�>q�#����+E3� -��3��L �30������# ��]�]� ��� -���<30�<� #C�>q�q��� ��:.�~����������3�+ # ��]�?+0`����C� ����+E3E����`<3������ # ��]�8

3����6�i���� ��0����p.rs��`<3 #n�>P�8����NL�<�0����`��!3�� #y�>P�8

3�����+�� �C������3��<� #C�'o-?3����C���������`> -i+E���03������ #F?��30��:�� # I�qb�:;������� #FS%L -�2e0�>q;� � � �>q[I-?5g�#;#[o3�:;�03��� ���� ��.�.��`�+ #y��?[]3k&,�cy@+c`����6�.���������3 #*IF�3k�*�C��# � �

�����30�.���73���` #*8�PpC�*�� #�I�qp.:.���3 � ��� # � �

`�L -+E+ #n�'I �

`�����+E3��*:. -���T.��(�#C�'o�o`�����+E3c����NL�<���<�.`<� # �'o�q(���:�p.���#�q[I!.�[ �3 #�q[I

!.�[ �3������ �C������3c�*:��Dpi�<� #�q[INL:���`<3������. -��~3s�6��N # � �

NL:���( �������3� � # � �

����3 #�8�P����3������� - #�I �

������D(.��:;p.�� #y�>]�q������D����3 #.I�8�. -���R��N # � �

��Nv a- ����L �p.���# ��8��Nv -� �7uF�����<+0+0������# �-?�C������3��<� #y�'o�8����NL�7������`�� #��>P;�+0�����03X����3 #.I�8+0��������(�` �. �� # I�8:���+0��������(�`��. �� # I�8:���+0��������(�����3 #;?[#:���+0��������(�����.�D����3 #.I�8:���+0��������(�+E�.���E3%����3 #.I�8a- -�:�� �� -�����"��N # � �

a[����(�#y� ��]

:��. ��0�������:.+ ���i�<�� �3���� #;?�?:��. ��0����C�<�� �3���� # ��o:��. ��0�d�.�:�+,���C�<�� �30��� #;?�?:���(��<T.�.�<(�pC���. �aF����� #y�>q # ��I:�� �*:. -��~T �<( �. -��� # �F�:���+0��������( ` �. �� # I�8:���+0��������( ����3 #;?[#:���+0��������( ������ ����3 #.I�8:���+0��������( +0�����03%����3 #.I�8:�+0�<��� (��<T.����( `�����a[�7��+0������#n�'I�P:�+0�����D(�������`<30��a[� #.8�8

a- -���( �7uF�����<+0+0������# ��Ia- -�:��

��Nv a- ����L �p.���# ��8��Nv -� �7uF�����<+0+0������# �-?

a- -�:��9e_+0���d -��3���`> � 3��<����g�# � �

a- -�:��R�� -�������Nv 3k�*�C��# � �

��N�3k�*�i� pC���� #�I�q��N�3k�*�i�"(���:;p.�� #y�>]�8��N�3k�*�i� !.�[ �3 #y�>]�8

Page 217: ETH Z · # 1.1 Why learn programming? "!$#% '&)(+*-,. /#0 213 4,5 6,7 !$89(0:; < >=?(0= ! @$= ,.8 / A?,.# BC13 DE / F G /8?H (I!$=) J,.#0 KL!$=MDN!$:O#!.!$#0*PDQ

� � � � � �F�'o

��N�3k�*�C� ����3 #;?�o��N�3k�*�C� :���+0��������(�����3 #;?[#

a- ����L �p.���# ��8 -(�(;����+0+X��N # ��8�. -���R��N # ��8+E3� �30��` #.o�# #�#�q3k�*�C� ��N # ��8a� ��:��"��N # ��8

a- ����L �p.��R(���`�� ��� �3������ # ��8a- ����L �p.��R(��<T.����3�������# ��8aF��+0��p.�����3k�

��N �. -��� #�o�Pa[����(�#y� ��]a[����(ZNL:���`<3������ #y���'oa[��� X�<:.�d ��.� ���`�����3��<`<3�:;��� #n��?

&V�������� +E3� �3���������3 #;o�qpC�*(;� #.o�q

� �<�0��� ������3��� -�� � M3�������#�q�]