a) Basic algorithms, data structures and programming techniques
- basic notions of algorithmic efficiency
- divisibility, Euclid's algorithm
- primality testing, the sieve of Eratosthenes
- Horner's rule
- dividing an integer into digits, positional notation for numbers
- array search algorithms (sequential, binary, sentinel)
- sorting data in an array (internal sorting)
- basic matrix operations
- implementing stacks and queues using an array
- higher-precision arithmetic ("long numbers")
- recursion, backtracking, divide and conquer
- depth-first search and breadth-first search
- the minimax algorithm
- heaps and heap operations
- factor sets
- dynamic data structures, linked list operations
- binary search trees, balanced binary trees (AVL trees)
- multiway binary trees (B-trees)
- representing and evaluating arithmetic expressions
- external sorting b) Typical programming language elements and mechanisms, as exemplified in the Turbo Pascal language
- variables, constants, types, variable initializers
- primitive and compound data types (numbers, characters, booleans, enumerated types, arrays, lists, strings of symbols)
- simple and compound statements (assignment, if, while, repeat, for, case, with)
- text files (including formatted output)
- procedures and functions (local identifiers, parameter passing mechanisms, recursion)
- the goto statement
- pointers and dynamically allocated data
- basic compiler directives (memory limits, run-time checks) c) Working with an IDE (integrated development environment), creating and debugging programs - practically demonstrated using the Turbo Pascal or Free Pascal IDE (editor, compiler, debugging tools - tracing, examining variable values etc.)
A first course about programming and algorithms for first-year students studying computer science and computer science education. The course covers principles of algorithms, basic algorithms, data structures, programming techniques, typical programming environments and practical program design and debugging.