Fundamentals of Computer Programming with C# (The Bulgarian C# Programming Book) by Svetlin Nakov & Co. http://www.introprogramming.info ISBN: 978-954-400-773-7 ISBN-13: 978-954-400-773-7 (9789544007737) ISBN-10: 954-400-773-3 (9544007733) Pages: 1122 Language: English Published: Sofia, 2013 Tags: book; free book; ebook; e-book; programming; computer programming; programming concepts; programming principles; tutorial; C#; data structures; algorithms; Intro C#; C# book; book C#; CSharp; CSharp book; programming book; book programming; textbook; learn C#; study C#; learn programming; study programming; how to program; programmer; practical programming guide; software engineer; software engineering; computer programming; software developer; software technologies; programming techniques; logical thinking; algorithmic thinking; developer; software development; programming knowledge; programming skills; programming language; basics of programming; presentations; presentation slides; coding; coder; source code; compiler; development tools; code decompiler; JustDecompile; debugging code; debugger; Visual Studio; IDE; development environment; bug fixing; class library; API; C#; .NET; .NET Framework; types; variables; operators; expressions; statements; value types; reference types; type conversion; console; console input; console output; console application; conditional statements; if; if-else; switch-case; loops; whole; do-while; for loops; foreach; nested loops; arrays; matrices; multidimensional arrays; numeral systems; binary numbers; decimal numbers; hexadecimal numbers; representations of numbers; methods; method invocation; parameters; recursion; iteration; recursive algorithms; classes; objects; fields; constructors; properties; static fields; static methods; static constructor; static members; namespaces; exceptions; exception handling; stack trace; catch exception; throw exception; try-catch; try-finally; using statement; strings; text processing; StringBuilder; escaping; System.String; regular expressions; string formatting; OOP; object-oriented programming; access modifiers; public; private; protected; internal; this keyword; const fields; readonly fields; default constructor; implicit constructor; overloading; method overloading; constructor overloading; automatic properties; read-only properties; constants; enumerations; inner classes; nested classes; generics; generic types; generic methods; text files; streams; files; StreamReader; StreamWriter; data structures; ADT; abstract data structure; linear data structures; list; linked list; static list; doubly-linked list; array list; stack; queue; deque; trees; graphs; binary tree; binary search tree; balanced tree; balanced search tree; B-tree; red-black tree; tree traversal; ordered balanced search tree; graph representation; list of edges; list of successors; adjacency matrix; depth-first search; DFS; breadth-first search; BFS; dictionary; hash table; associative array; hash function; collision resolution; set; multi set; bag; multi bag; multi dictionary; algorithm complexity; asymptotic notation; time complexity; memory complexity; execution time; performance; collection classes; .NET collections; Wintellect Power Collections; OOP; principles; abstraction; encapsulation; polymorphism; abstract class; interface; operation contract; virtual method; method overriding; cohesion; strong cohesion; coupling; loose coupling; spaghetti code; object-oriented modeling; UML; use-case diagram; sequence diagram; statechart diagram; activity diagram; design patterns; singleton; factory method; code quality; high-quality code; code conventions; naming identifiers; variable names; method names; naming classes; code formatting; high-quality classes; high-quality methods; variable scope; variable span; variable lifetime; control-flow statements; defensive programming; assertions; code documentation; documentation; self- documenting code; code refactoring; lambda expressions; LINQ; extension methods; anonymous types; LINQ queries; data filtering; data searching; data sorting; data grouping; problem solving; problem solving methodology; problems and solutions; generating ideas; task decomposition; algorithm efficiency; writing code; code testing; border cases testing; borderline cases; performance testing; regression testing; exercises; problems; solutions; programming guidelines; programming problems; programming exercises; good programmer; efficient programmer; pragmatic programmer; Nakov; Svetlin Nakov; Software Academy; Bulgaria; Bulgarian book; BG book; Bulgarian C# book; Kolev; Vesselin Kolev; Dilyan Dimitrov; Hristo Germanov; Iliyan Murdanliev; Mihail Stoynov; Mihail Valkov; Mira Bivas; Nikolay Kostov; Nikolay Nedyalkov; Nikolay Vassilev; Pavel Donchev; Pavlina Hadjieva; Radoslav Ivanov; Radoslav Kirilov; Radoslav Todorov; Stanislav Zlatinov; Stefan Staev; Teodor Bozhikov; Teodor Stoev; Tsvyatko Konov; Vesselin Georgiev; Yordan Pavlov; Yosif Yosifov, ISBN 9789544007737, ISBN 9544007733, ISBN 978-954-400-773-7, ISBN 954-400-773-3 Book Front Cover Contents Contents .............................................................................................. 2 Detailed Table of Contents .................................................................. 5 Preface .............................................................................................. 13 Chapter 1. Introduction to Programming .......................................... 69 Chapter 2. Primitive Types and Variables ........................................ 111 Chapter 3. Operators and Expressions............................................. 139 Chapter 4. Console Input and Output .............................................. 165 Chapter 5. Conditional Statements .................................................. 195 Chapter 6. Loops ............................................................................. 211 Chapter 7. Arrays ............................................................................ 235 Chapter 8. Numeral Systems ........................................................... 265 Chapter 9. Methods ......................................................................... 293 Chapter 10. Recursion ..................................................................... 351 Chapter 11. Creating and Using Objects .......................................... 385 Chapter 12. Exception Handling ...................................................... 415 Chapter 13. Strings and Text Processing ......................................... 457 Chapter 14. Defining Classes ........................................................... 499 Chapter 15. Text Files...................................................................... 615 Chapter 16. Linear Data Structures ................................................. 641 Chapter 17. Trees and Graphs ......................................................... 681 Chapter 18. Dictionaries, Hash-Tables and Sets .............................. 727 Chapter 19. Data Structures and Algorithm Complexity .................. 769 Chapter 20. Object-Oriented Programming Principles ..................... 807 Chapter 21. High-Quality Programming Code .................................. 853 Chapter 22. Lambda Expressions and LINQ ..................................... 915 Chapter 23. Methodology of Problem Solving .................................. 935 Chapter 24. Sample Programming Exam – Topic #1 ........................ 985 Chapter 25. Sample Programming Exam – Topic #2 ...................... 1041 Chapter 26. Sample Programming Exam – Topic #3 ...................... 1071 Conclusion ..................................................................................... 1119 F UNDAMENTALS OF C P OMPUTER ROGRAMMING C# WITH (The Bulgarian C# Programming Book) Svetlin Nakov & Co. Dilyan Dimitrov Radoslav Kirilov Hristo Germanov Radoslav Todorov Iliyan Murdanliev Stanislav Zlatinov Mihail Stoynov Stefan Staev Mihail Valkov Svetlin Nakov Mira Bivas Teodor Bozhikov Nikolay Kostov Teodor Stoev Nikolay Nedyalkov Tsvyatko Konov Nikolay Vasilev Vesselin Georgiev Pavel Donchev Veselin Kolev Pavlina Hadjieva Yordan Pavlov Radoslav Ivanov Yosif Yosifov Sofia, 2013 F C UNDAMENTALS OF OMPUTER P C# ROGRAMMING WITH (The Bulgarian C# Programming Book) © Svetlin Nakov & Co., 2013 The book is distributed freely under the following license conditions: 1. Book readers (users) may: - distribute free of charge unaltered copies of the book in electronic or paper format; - use portions of the book and the source code examples or their modifications, for all intents and purposes, including educational and commercial projects, provided they clearly specify the original source, the original author(s) of the corresponding text or source code, this license and the website www.introprogramming.info; - distribute free of charge portions of the book or modified copies of it (including translating the book into other languages or adapting it to other programming languages and platforms), but only by explicitly mentioning the original source and the authors of the corresponding text, source code or other material, this license and the official website of the project: www.introprogramming.info. 2. Book readers (users) may NOT: - distribute for profit the book or portions of it, with the exception of the source code; - remove this license from the book when modifying it for own needs. All trademarks referenced in this book are the property of their respective owners. Official Web Site: http://www.introprogramming.info ISBN 978-954-400-773-7 Detailed Table of Contents Contents .............................................................................................. 2 Detailed Table of Contents .................................................................. 5 Preface .............................................................................................. 13 About the Book .......................................................................................... 13 C# and .NET Framework .............................................................................. 17 How То Read This Book? .............................................................................. 22 Why Are Data Structures and Algorithms Emphasized? ...................................... 25 Do You Really Want to Become a Programmer?................................................ 26 A Look at the Book’s Contents ...................................................................... 29 History: How Did This Book Come to Be? ........................................................ 38 Authors and Contributors ............................................................................. 40 The Book Is Free of Charge! ......................................................................... 53 Reviews .................................................................................................... 53 License ..................................................................................................... 63 Resources Coming with the Book ................................................................... 65 Chapter 1. Introduction to Programming .......................................... 69 In This Chapter .......................................................................................... 69 What Does It Mean "To Program"? ................................................................. 69 Stages in Software Development ................................................................... 71 Our First C# Program .................................................................................. 75 The C# Language and the .NET Platform ........................................................ 79 Visual Studio IDE ........................................................................................ 93 Alternatives to Visual Studio ....................................................................... 104 Decompiling Code ..................................................................................... 104 C# in Linux, iOS and Android ...................................................................... 107 Other .NET Languages ............................................................................... 107 Exercises................................................................................................. 108 Solutions and Guidelines ............................................................................ 108 Chapter 2. Primitive Types and Variables ........................................ 111 In This Chapter ........................................................................................ 111 What Is a Variable? ................................................................................... 111 Data Types .............................................................................................. 111 Variables ................................................................................................. 123 Value and Reference Types ........................................................................ 128 Literals ................................................................................................... 131 6 Fundamentals of Computer Programming with C# Exercises................................................................................................. 135 Solutions and Guidelines ............................................................................ 136 Chapter 3. Operators and Expressions............................................. 139 In This Chapter ........................................................................................ 139 Operators ................................................................................................ 139 Type Conversion and Casting ...................................................................... 152 Expressions ............................................................................................. 158 Exercises................................................................................................. 160 Solutions and Guidelines ............................................................................ 161 Chapter 4. Console Input and Output .............................................. 165 In This Chapter ........................................................................................ 165 What Is the Console? ................................................................................ 165 Standard Input-Output .............................................................................. 169 Printing to the Console .............................................................................. 169 Console Input .......................................................................................... 183 Console Input and Output – Examples .......................................................... 190 Exercises................................................................................................. 192 Solutions and Guidelines ............................................................................ 193 Chapter 5. Conditional Statements .................................................. 195 In This Chapter ........................................................................................ 195 Comparison Operators and Boolean Expressions ............................................ 195 Conditional Statements "if" and "if-else" ....................................................... 200 Conditional Statement "switch-case" ............................................................ 206 Exercises................................................................................................. 208 Solutions and Guidelines ............................................................................ 209 Chapter 6. Loops ............................................................................. 211 In This Chapter ........................................................................................ 211 What Is a "Loop"? ..................................................................................... 211 While Loops ............................................................................................. 211 Do-While Loops ........................................................................................ 216 For Loops ................................................................................................ 221 Foreach Loops .......................................................................................... 225 Nested Loops ........................................................................................... 226 Exercises................................................................................................. 231 Solutions and Guidelines ............................................................................ 233 Chapter 7. Arrays ............................................................................ 235 In This Chapter ........................................................................................ 235 What Is an "Array"? .................................................................................. 235 Declaration and Allocation of Memory for Arrays ............................................ 235 Access to the Elements of an Array .............................................................. 238 Reading an Array from the Console .............................................................. 241 Detailed Table of Contents 7 Printing an Array to the Console .................................................................. 243 Iteration through Elements of an Array......................................................... 244 Multidimensional Arrays ............................................................................. 246 Arrays of Arrays ....................................................................................... 253 Exercises................................................................................................. 257 Solutions and Guidelines ............................................................................ 259 Chapter 8. Numeral Systems ........................................................... 265 In This Chapter ........................................................................................ 265 History in a Nutshell .................................................................................. 265 Numeral Systems ..................................................................................... 266 Representation of Numbers ........................................................................ 276 Exercises................................................................................................. 289 Solutions and Guidelines ............................................................................ 290 Chapter 9. Methods ......................................................................... 293 In This Chapter ........................................................................................ 293 Subroutines in Programming ...................................................................... 293 What Is a "Method"? ................................................................................. 293 Why to Use Methods? ................................................................................ 294 How to Declare, Implement and Invoke a Method? ......................................... 295 Declaring Our Own Method ......................................................................... 295 Implementation (Creation) of Own Method .................................................... 300 Invoking a Method .................................................................................... 301 Parameters in Methods .............................................................................. 303 Returning a Result from a Method ............................................................... 328 Best Practices when Using Methods.............................................................. 345 Exercises................................................................................................. 347 Solutions and Guidelines ............................................................................ 348 Chapter 10. Recursion ..................................................................... 351 In This Chapter ........................................................................................ 351 What Is Recursion? ................................................................................... 351 Example of Recursion ................................................................................ 351 Direct and Indirect Recursion ...................................................................... 352 Bottom of Recursion .................................................................................. 352 Creating Recursive Methods ....................................................................... 352 Recursive Calculation of Factorial ................................................................ 353 Recursion or Iteration? .............................................................................. 355 Simulation of N Nested Loops ..................................................................... 356 Which is Better: Recursion or Iteration?........................................................ 362 Using Recursion – Conclusions .................................................................... 378 Exercises................................................................................................. 378 Solutions and Guidelines ............................................................................ 380 Chapter 11. Creating and Using Objects .......................................... 385 8 Fundamentals of Computer Programming with C# In This Chapter ........................................................................................ 385 Classes and Objects .................................................................................. 385 Classes in C# ........................................................................................... 387 Creating and Using Objects ........................................................................ 390 Namespaces ............................................................................................ 405 Exercises................................................................................................. 410 Solutions and Guidelines ............................................................................ 412 Chapter 12. Exception Handling ...................................................... 415 In This Chapter ........................................................................................ 415 What Is an Exception? ............................................................................... 415 Exceptions Hierarchy ................................................................................. 424 Throwing and Catching Exceptions ............................................................... 426 The try-finally Construct ............................................................................ 432 IDisposable and the "using" Statement ......................................................... 437 Advantages of Using Exceptions .................................................................. 439 Best Practices when Using Exceptions .......................................................... 445 Exercises................................................................................................. 453 Solutions and Guidelines ............................................................................ 454 Chapter 13. Strings and Text Processing ......................................... 457 In This Chapter ........................................................................................ 457 Strings.................................................................................................... 457 Strings Operations .................................................................................... 462 Constructing Strings: the StringBuilder Class ................................................. 480 String Formatting ..................................................................................... 488 Exercises................................................................................................. 491 Solutions and Guidelines ............................................................................ 496 Chapter 14. Defining Classes ........................................................... 499 In This Chapter ........................................................................................ 499 Custom Classes ........................................................................................ 499 Usage of Class and Objects ........................................................................ 502 Organizing Classes in Files and Namespaces .................................................. 505 Modifiers and Access Levels (Visibility) ......................................................... 508 Declaring Classes ..................................................................................... 509 The Reserved Word "this" .......................................................................... 511 Fields ..................................................................................................... 512 Methods .................................................................................................. 518 Accessing Non-Static Data of the Class ......................................................... 519 Hiding Fields with Local Variables ................................................................ 522 Visibility of Fields and Methods.................................................................... 524 Constructors ............................................................................................ 531 Properties ............................................................................................... 549 Static Classes and Static Members ............................................................... 559 Detailed Table of Contents 9 Structures ............................................................................................... 580 Enumerations .......................................................................................... 584 Inner Classes (Nested Classes) ................................................................... 590 Generics ................................................................................................. 594 Exercises................................................................................................. 610 Solutions and Guidelines ............................................................................ 613 Chapter 15. Text Files...................................................................... 615 In This Chapter ........................................................................................ 615 Streams .................................................................................................. 615 Reading from a Text File ............................................................................ 620 Writing to a Text File ................................................................................. 628 Input / Output Exception Handling ............................................................... 630 Text Files – More Examples ........................................................................ 631 Exercises................................................................................................. 636 Solutions and Guidelines ............................................................................ 638 Chapter 16. Linear Data Structures ................................................. 641 In This Chapter ........................................................................................ 641 Abstract Data Structures ............................................................................ 641 List Data Structures .................................................................................. 642 Exercises................................................................................................. 676 Solutions and Guidelines ............................................................................ 678 Chapter 17. Trees and Graphs ......................................................... 681 In This Chapter ........................................................................................ 681 Tree Data Structures ................................................................................. 681 Trees ...................................................................................................... 681 Graphs ................................................................................................... 714 Exercises................................................................................................. 722 Solutions and Guidelines ............................................................................ 723 Chapter 18. Dictionaries, Hash-Tables and Sets .............................. 727 In This Chapter ........................................................................................ 727 Dictionary Data Structure........................................................................... 727 Hash-Tables ............................................................................................ 735 The "Set" Data Structure ........................................................................... 760 Exercises................................................................................................. 765 Solutions and Guidelines ............................................................................ 767 Chapter 19. Data Structures and Algorithm Complexity .................. 769 In This Chapter ........................................................................................ 769 Why Are Data Structures So Important? ....................................................... 769 Algorithm Complexity ................................................................................ 770 Comparison between Basic Data Structures ................................................... 779 When to Use a Particular Data Structure? ..................................................... 779 10 Fundamentals of Computer Programming with C# Choosing a Data Structure – Examples ......................................................... 786 External Libraries with .NET Collections ........................................................ 801 Exercises................................................................................................. 803 Solutions and Guidelines ............................................................................ 804 Chapter 20. Object-Oriented Programming Principles ..................... 807 In This Chapter ........................................................................................ 807 Let’s Review: Classes and Objects ............................................................... 807 Object-Oriented Programming (OOP) ........................................................... 807 Fundamental Principles of OOP .................................................................... 808 Inheritance .............................................................................................. 809 Abstraction .............................................................................................. 824 Encapsulation .......................................................................................... 828 Polymorphism .......................................................................................... 830 Cohesion and Coupling .............................................................................. 836 Object-Oriented Modeling (OOM) ................................................................. 842 UML Notation ........................................................................................... 844 Design Patterns ........................................................................................ 847 Exercises................................................................................................. 851 Solutions and Guidelines ............................................................................ 852 Chapter 21. High-Quality Programming Code .................................. 853 In This Chapter ........................................................................................ 853 Why Is Code Quality Important? ................................................................. 853 What Does Quality Programming Code Mean? ................................................ 854 Why Should We Write Quality Code? ............................................................ 854 Identifier Naming ..................................................................................... 857 Code Formatting ....................................................................................... 866 High-Quality Classes ................................................................................. 874 High-Quality Methods ................................................................................ 878 Proper Use of Variables .............................................................................. 883 Proper Use of Expressions .......................................................................... 890 Use of Constants ...................................................................................... 891 Proper Use of Control Flow Statements ......................................................... 894 Defensive Programming ............................................................................. 898 Code Documentation ................................................................................. 900 Code Refactoring ...................................................................................... 904 Unit Testing ............................................................................................. 905 Additional Resources ................................................................................. 912 Exercises................................................................................................. 912 Solutions and Guidelines ............................................................................ 913 Chapter 22. Lambda Expressions and LINQ ..................................... 915 In This Chapter ........................................................................................ 915 Extension Methods .................................................................................... 915