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 FUNDAMENTALS OF COMPUTER PROGRAMMING WITH C# (The Bulgarian C# Programming Book) Svetlin Nakov & Co. Dilyan Dimitrov Hristo Germanov Iliyan Murdanliev Mihail Stoynov Mihail Valkov Mira Bivas Nikolay Kostov Nikolay Nedyalkov Nikolay Vasilev Pavel Donchev Pavlina Hadjieva Radoslav Ivanov Radoslav Kirilov Radoslav Todorov Stanislav Zlatinov Stefan Staev Svetlin Nakov Teodor Bozhikov Teodor Stoev Tsvyatko Konov Vesselin Georgiev Veselin Kolev Yordan Pavlov Yosif Yosifov Sofia, 2013 FUNDAMENTALS OF COMPUTER PROGRAMMING WITH C# (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 [...]... thinking and knowledge of all basic data structures and algorithms The information below comes from Svetlin Nakov, the leading author of this book, who passed software engineering interviews at Microsoft and Google in 2007-2008 and shares his own experience 26 Fundamentals of Computer Programming with C# Job Interviews at Google 100% of the questions at job interviews for software engineers at Google,... a developer There is no other way! Do Not Skip the Exercises! At the end of each chapter there is a considerable list of exercises Do not skip them! Without exercises, you will not learn a thing After you read a chapter, you should sit in front of the computer and play with the examples 24 Fundamentals of Computer Programming with C# you have seen in the book Then you should set about solving all problems... skills that even experienced professional programmers lack Software companies are riddled with a shocking amount of self-taught amateurs who, despite having programmed on a salary for years, have no grasp of the fundamentals of programming and have no idea what a hash table is, how polymorphism works and how to work with bitwise operations Don’t be like them! Learn the basics of programming first and then... technology, programming languages, operation systems, compilers, computer graphics, games, hardware, artificial intelligence and everything else related to computers and technologies The more they learn, the more knowledge and skills they crave after Their life is tied to technologies and they change 28 Fundamentals of Computer Programming with C# with them, enjoying the development of computer science,... Framework, which will help us in our study of the language’s capabilities Author of the chapter is Pavel Donchev; editors are Teodor Bozhikov and Svetlin Nakov The content of the chapter is somewhat based on the work of 30 Fundamentals of Computer Programming with C# Luchesar Cekov from the book "Introduction to Programming with Java" Translation to English: by Atanas Valchev (edited by Vladimir Tsenev... formatting of text content on the console, with various ways for printing numbers and dates Author of the chapter is Veselin Georgiev and editor is Radoslav Todorov The content of the entire chapter is based on the work of Mario Peshev from the book "Introduction to Programming with Java" Translation to English: by Vesselin Georgiev (edited by Todor Mitev and Vladimir Amiorkov) 34 Fundamentals of Computer Programming. .. and show you how useful they are Author of the chapter is Hristo Germanov and editor is Radoslav Todorov The content of the chapter is based on the work of Mariyan Nenchev from the book "Introduction to Programming with Java" Translation to English: by Boyan Dimitrov (edited by Radoslav Todorov and Zhelyazko Dimitrov) 32 Fundamentals of Computer Programming with C# Chapter 8: Numeral Systems In the... we will familiarize ourselves with some of the basic representations of data in programming and with linear data structures, because very often, in order to solve a given problem, we need to work with a sequence of elements For example, to read this book we have to read consecutively every single page, e.g we have to traverse consecutively every single element of its set of pages We are going to see... preface also describes the history of the book, the content of its chapter one by one, the team of authors, editors and translators from Bulgarian to English In contains the full reviews written by famous software engineers from Microsoft, Google, SAP, VMware, Telerik and other leading software companies from all over the world Author of the preface is Svetlin Nakov (with little contribution from Veselin... to Programming In the chapter "Introduction to Programming" , we will take a look at the basic terminology in programming and write our first program We will familiarize ourselves with what programming is and what connection to computers and programming languages it has We will briefly review the main stages in software development, introduce the C# language, the NET platform and the different Microsoft