Fundamentals of Computer Science I
Principles of Computer Programming
Final projects
About
In this course we are mainly concerned with fundamental algorithmic techniques in problem solving. Additionally, we take a beginner's tour on C/C++ programming language. Substantial portions of the material for this course are presented only in lecture, so students should be regularly attend lectures.
Programming projects
Homework is made up of series of programming projects given every week. Each series consists of three or four programming projects, each one is intended for examining students skill in a particular technique in algorithmics and programming. There is not any final project nor any late time submission after the course end. Projects should be submitted before the stated deadline via SbutA. About one third of the course grade is dedicated to programming projects.
Textbook
Slides and the other materials provided in this page should be enough to qualify the course. However, the following books are just recommended as optional reference for C/C++ programming language;
C++ Primer Plus  C++ How to Program  Herb Schildt's C++ Programming Cookbook 
The C++ Programming Language 
Development Environments
There are several IDEs for C/C++ programming, some that serve the interests of professional programmers and others that just present a minimal set of programming requirements. Among them, we recommend two freely available IDEs,
 The Bloodshed DevC++. Cached
 The Visual C++ Express edition. Also available from the allinone Visual Studio 2010 Express
The DevC++ uses a Windows port of gcc that is the standard C/C++ compiler in Linux systems. Instead, the Visual C++ is bundled with an optimized C/C++ compiler for Microsoft .NET framework.
External likns
 Project Euler is a collection of mathematical/computer programming problems that will require more than just mathematical insights to solve. It is highly recommended to start with simpler problems (see how much people solved the problem). Challenging with Project Euler problems will prove that your algorithmic mind can be improved.
 cplusplus.com is a great reference for C/C++ programming language, including useful sample codes, programmers forum and many other documents related to C/C++.
Schedule & course materials
The topic of each lecture and reading material including sample codes will be listed below.
Session 1 
Introduction to the course. History of computing and theoretical computer science. 

Session 2 
Introduction to computer hardware. Universal Turing Machine and modern computers. Terminology of algorithmic problem solving and computer programming languages. 

Session 3 
Computability and complexity. Computer processors and computer memories in practice. 

Session 4 
Data representation in computer memory. Two's complement representation of negative integers. Character encoding. Protocols for floating point. 

Session 5 
Introduction to flowchart. Variables in mathematics and programming. The simplest algorithmic approach: "inputcalculateresult", simple path flowchart. 

Session 6 
Introduction to C/C++ programming language: history and prototype. The first program: Variable declaration. Simple iostream. Implementation of "inputcalculateresult" algorithms in C/C++. 

Session 7 
Decision and branch. Comparative operators. 

Session 8 
Decision and branch. Section 2: solving quadratic equation and ... 

Session 9 
Decision and branch. Section 3: Logic conjunction operators. Right triangularity. Intervals overlapping. Leap year. 

Session 10 
Decision and branch. Section 4: Resolve complicated equations by intermediate variables. All about calendars! 

Session 11 
Iteration loop. Counter loop. The Cstyle counter loop, Compound assignment operators. Increase and decrease operators. 

Session 12 
Iteration loop. Section 2: precondition, postcondition and loop invariant. Sum and Factorial. Adding up a list of numbers. Divisors and Primality. 

Session 13 
Iteration loop.Section 3. Nested loops. The 

Session 14 
Iteration loop. Section 4. Common divisors and Greatest Common Divisor. The ASCI character table. 

Session 15 
Review of previous topics. More details on C/C++ programming language. Fundamental data types. Literal constants. How to convert characters to numeric values. 

Session 16 
Review of previous topics. More details on C/C++ programming language. Calling functions and operators. Return values: keep or drop. 

Session 17 
Function declaration. Actual parameter vs. formal parameter. Void function. Pseudo random generator, 

Session 18 
Functions. Section 2: Reference Parameter vs. Value Parameter. Reference parameters as input/output arguments. Software development in topdown fashion. 

Session 19 
Arrays. Simple applications for arrays. Arrays as vectors in linear algebra. Arrays as polynomials. 

Session 20 
Arrays. Section 2. Arrays as function parameters. How to represent finite sets using arrays. Explicit approach vs. characteristicbased approach. Set operations: membership test, intersection, union Eratosthenes prime sieve Computing data frequencies and histogram. 

Session 21 
Arrays. Section 3: Multidimensional Arrays. Simple matrix operations. KhayyámPascal triangular array. Array initialization using constants. 

Session 22 
Strings. Cstyle strings. The objectoriented solution, String functions and operators. 
