# Mathematics and Computer Science core 1

**In the first year of the Mathematics and Computer Science degree,
students spend 50% of their time on courses selected from the core of
the Computer Science degree, and 50% of their time on core courses
selected from the core of the Mathematics degree.**

## Contents |

## Computer Science courses

### Functional Programming

This is a first course in programming. You will use of a programming language called Haskell, which allows programs to be viewed as mathematical functions. This makes the language very powerful, so that we can easily construct programs that would be difficult or very large in other languages. An important theme of the course is how to apply mathematical reasoning to programs, so as to prove that a program performs its task correctly, or to derive it by algebraic manipulation from a simpler but less efficient program for the same problem. You gain hands-on experience of programming through two lab exercises: the first one aims to make you acquainted with the mechanics of writing Haskell programs, and the second one tackles a more challenging programming task of simulating the world of an imaginary animal. This demonstration shows you more about this problem.

### Design and Analysis of Algorithms

In this course you will learn about the basics of algorithms, the methods of solving problems by computer,
and data structures - the means by which information is represented and
manipulated inside a computer. Building
on the experience with Haskell from *Functional Programming*, the course covers the principles of algorithm design, analysis
of the performance of algorithms, and the fundamental ideas in the design of
efficient data structures. The
emphasis is on choosing appropriate data structures for a problem domain and
designing correct and effective algorithms to operate on these data structures
in solving the problem. You will learn to apply these ideas in practice through a lab exercise.

### Imperative Programming

In these courses you will apply lessons you learnt in *Functional
Programming* to the design of programs written in a more
conventional way. By studying a sequence of programming examples,
each a useful software tool in its own right, you will learn to
construct programs in a systematic way, structuring them as a
collection of modules with well-defined interfaces. These courses also
cover informally the method of invariants for understanding and
reasoning about programs that contain loops. You will conclude
with the study of a larger programming example, such as a
graphical program for finding the best route for driving between
specified towns in the UK. You can further explore this problem using
this demonstration. Through lab
exercises, you will learn to create, debug and maintain programs of a
non-trivial but moderate size.

The second part of the course introduces the ideas of Object Oriented Programming: abstract data types and data encapsulation; interfaces and polymorphism; and generics and collection classes. In lab sessions, you will work to develop and enhance your own text editor, supporting incremental search and multi-level undo.

## Mathematics courses

### Introductory Maths

In this course you study some of the fundamental concepts of Mathematics which are widely used throughout Computer Science. You will study the notions of sets and functions and you will see how to prove properties about these notions using techniques such as Mathematical Induction.

### Linear Algebra

An important application of computers in Mathematics is in solving problems that can be expressed as systems of simultaneous linear equations. You will have learnt at school how to solve particular sets of simultaneous equations, but this course goes further. You will study the general conditions that determine which systems of equations have solutions, and for which systems the solution is unique, as well as systematic methods for solving systems of equations. This demonstration, which you might program during your 2nd year, utilizes the mathematics you will learn in this course along with the 2nd year numerical computation course.

### Continuous Mathematics

This will be taught by the Department of Computer Science. Many areas of mathematics, and applications of mathematics in the applied sciences, are underpinned by the concepts of calculus, i.e. differentiation and integration. The first aim of this course is to provide an introduction to calculus in several variables that will form a basis for later courses. This theory will be demonstrated using examples drawn from maximising or minimising functions of one or more variables, the solution of ordinary differential equations, and the solution of simple partial differential equations (including the reduction of partial differential equations to ordinary differential equations via a change of variables in special cases). The second aim of the course is to introduce some computational techniques in calculus, for example numerical integration and the numerical solution of differential equations. These techniques lend themselves to practical implementation, allowing demonstration of the theory developed during the course.

### Analysis

In these lectures we introduce the real and complex numbers and study their properties, particularly completeness; define and study limits of sequences, convergence of series, and power series. Then we study continuity of functions of a real or complex variable variable, and differentiablity of functions of a real variable. Finally, we define a simple integral and study its properties; prove the Mean Value Theorem for Integrals and the Fundamental Theorem of Calculus. This gives us the tools to justify term by term differentiation of power series and deduce the elementary properties of the trigonometric functions.

### Groups and Group Actions

Abstract algebra evolved in the twentieth century out of nineteenth century discoveries in algebra, number theory and geometry. It is a highly developed example of the power of generalisation and axiomatisation in mathematics. The first objective is to develop some concepts of set theory as a useful language for abstract mathematics. Next we aim to introduce the student to some of the basic techniques of algebra. Thirdly, we aim to introduce group theory through axioms and examples both because groups are typical and famous examples of algebraic structures, and because of their use in the measurement of symmetry. Finally we begin the study of fields and rings which are important in the study of polynomials and the solution of polynomial equations.

### Probability

An understanding of random phenomena is becoming increasingly important in today's world within social and political sciences, finance, life sciences and many other fields. The aim of this introduction to probability is to develop the concept of chance in a mathematical framework.