Lecture 2 Introduction to C Programming Arne Kutzner Hanyang University / Seoul Korea
Introduction to C ProgrammingL2.2 This week … You will learn: –From the first Computers to the C Programming Languages Von Neumann Architecture The Idea of “binary computing” Origins of Programming Languages –About Flowcharts and Algorithms
Von Neumann’s Computer Architecture Foundations of modern Computers and their Programming
Introduction to C ProgrammingL2.4 Computers until the second world war and before The earliest computing machines had fixed programs. –The earliest computers were not so much "programmed" as they were "designed". –"Reprogramming", when it was possible at all, was a laborious process, starting with flow charts and paper notes, followed by detailed engineering designs, and then the often arduous process of physically rewiring and rebuilding the machine.
Introduction to C ProgrammingL2.5 Examples of “fixed program computers” Colossus Mark I (Dec. 1943) / Colossus Mark II (June 1944) INFO in the Web: Purpose: Message Decoding during World War 2 (was used to help decipher teleprinter messages which had been encrypted using the Lorenz SZ40/42 machine (Enigma))
Introduction to C ProgrammingL2.6 Von Neumann Architecture (proposed 1945) Memory Control Unit Arithmetic Logic Unit Accumulator InputOutput
Introduction to C ProgrammingL2.7 Von Neumann Architecture (2) The Control Unit “understands” instructions like e.g. copy data from the memory to the accumulator => Instruction Set Architecture The Arithmetic Logic Unit performs arithmetic operations and Boolean operations. The Memory stores data and Program (Series of control unit instructions The Input takes data in form of an data stream from some medium The Output receives data in form of data stream and delivers them to some output medium
Introduction to C ProgrammingL2.8 Von Neumann Architecture (3) Von Neumann’s approach was revolutionary because: He created an instruction set architecture and detailed the computation as the execution of a series of instructions (the program) stored in the memory. –Program and data share the memory !! Highly flexible computer design
Introduction to C ProgrammingL2.9 Structure of Memory Ordered sequence of storage locations called memory cells. Each memory cell is identified by a unique address AddressesMemory Cells Content of a memory cell
Introduction to C ProgrammingL2.10 Instruction representation Instruction are encoded using sequences of bits Example PDP-11(single operand instructions): OP-CodeModeRegister 3 bit 10 bit 16 bit = 2 byte INFO in the Web:
Introduction to C ProgrammingL2.11 Computer nowadays? Almost all modern computer have still a Von Neumann Architecture Main Memory InputOutput CPU
How to program “von Neumann” computer ?
Introduction to C ProgrammingL2.13 Assembler Code Sequence of processor instructions in human readable text-form – this is called Assembler Code Example for PDP-11 Assembler Code:.TITLE HELLO WORLD.MCALL.TTYOUT,.EXIT HELLO:: MOV #MSG,R1 ;STARTING ADDRESS OF STRING 1$: MOVB (R1)+,R0 ;FETCH NEXT CHARACTER BEQ DONE ;IF ZERO, EXIT LOOP.TTYOUT ;OTHERWISE PRINT IT BR 1$ ;REPEAT LOOP DONE:.EXIT MSG:.ASCIZ /Hello, world!/.END HELLO This PDP-11 Assembler Code prints “Hello World”
Introduction to C ProgrammingL2.14 Assembler and Programming Languages Assembler was the first form of some primitive (low-level) programming language Definition: A programming language is a set of rules that provides a way of telling a computer what operations to perform.
Introduction to C ProgrammingL2.15 Disadvantages of Assembler Code Low level of abstraction –Code is processor (vendor)-specific Therefore: Non portable The code is unstructured –Difficult to read –Risk of “spaghetti-structure” Time intensive to learn and to program
Introduction to C ProgrammingL2.16 High-level Programming Languages The wish for some programming medium that is more abstract than assembler lead to the development of High-level Programming Languages Definition: A high-level programming language is a programming language that, in comparison to low-level programming languages, may be more abstract, easier to use, or more portable across platforms.
Introduction to C ProgrammingL2.17 Early high-level programming languages Fortran: For programming in the scientific area (number crunching) Cobol: For programming of business applications (e.g. banking applications) Lisp: Development originally motivated be research in the Artificial Intelligence area
Introduction to C ProgrammingL2.18 Fortran Code Example c PROGRAM sphere c This program determines the surface area and volume of a sphere, given c its radius. c Variable declarations REAL rad, area, volume, pi c Definition of variables crad = radius, area = surface area, volume = volume of the sphere c Assign a value to the variable pi. pi = c Input the value of the radius and echo the inputted value. PRINT *, 'Enter the radius of the sphere. ' READ *, rad PRINT *, rad, ' is the value of the radius. ' c Compute the surface area and volume of the sphere. area = 4.0 * pi * rad**2 volume = (4.0/3.0) * pi * rad**3 c Print the values of the radius (given in cm), the surface area (sq cm), c and the volume (cubic cm). PRINT *,'In a sphere of radius', rad, ', the surface area is', + area, ' and its volume is', volume, '. ' STOP END
Introduction to C ProgrammingL2.19 COBOL Code Example $ SET SOURCEFORMAT"FREE" IDENTIFICATION DIVISION. PROGRAM-ID. Multiplier. AUTHOR. Michael Coughlan. * Example program using ACCEPT, DISPLAY and MULTIPLY to * get two single digit numbers from the user and multiply them together DATA DIVISION. WORKING-STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS. 01 Num2 PIC 9 VALUE ZEROS. 01 Result PIC 99 VALUE ZEROS. PROCEDURE DIVISION. DISPLAY "Enter first number (1 digit) : " WITH NO ADVANCING. ACCEPT Num1. DISPLAY "Enter second number (1 digit) : " WITH NO ADVANCING. ACCEPT Num2. MULTIPLY Num1 BY Num2 GIVING Result. DISPLAY "Result is = ", Result. STOP RUN.
Introduction to C ProgrammingL2.20 Programming Languages
Introduction to C ProgrammingL2.21 Why was C created ? The origin of C is closely tied to the development of the Unix operating system –Originally Unix was implemented in Assembler for the PDP-7 (1970) –1973 Unix was “rewritten” for the PDP-11 architecture using the newly developed C Programming Language An older language “B” was unsuitable for this purpose due to some language design lacks
Introduction to C ProgrammingL2.22 Characteristics of C Primitive but fast Quite “low-level” compared to e.g. Java –Some people say: “More or less like assembler but independent of any specific instruction set” Strange and quite cryptic syntax Difficult to grasp
The Idea of Binary Computing Binary Number, Hexadecimal Number and the encoding of characters
Introduction to C ProgrammingL2.24 Binary Numbers A sequence of 1s and 0s can be interpreted as a decimal number e.g. 101 = 1*2 2 +0*2 1 +1*2 0 = 5 These type of number (0 and 1 represented) is called Binary Number
Introduction to C ProgrammingL bits = 1 Byte Todays computer architectures are based on a 8 bits (= 1 Byte) approach. –E.g. one memory cell has nowadays 1 Byte =
Introduction to C ProgrammingL2.26 Hexadecimal Numbers (1) Counting on the foundation of 16 digits ( 0 – F ) Reasonable in the context of the decomposition of binary number into blocks of 4 bits decimalbinaryhex A B C D E F
Introduction to C ProgrammingL2.27 Hexadecimal Numbers (2) Example: EE binary hex decimal 8 bit (1 Byte) 16 bit
Introduction to C ProgrammingL2.28 Exercise What is the number in decimal notation? What is the number 156 in hexadecimal notation?
Introduction to C ProgrammingL2.29 Characters and Numbers Using a Code Table numbers can be mapped to characters of some alphabet. Example (part of the ASCII table): CharacterCode (decimal) ‘A’65 ‘B’66 ‘C’67 ‘D’68
Introduction to C ProgrammingL2.30 Sequences of Characters (Strings) Text is represented as a sequence of characters (numbers) Such sequences are called Strings Example: HELLO The Text "Hello" as sequence of characters (numbers)
Algorithms and Flowcharts Binary Number, Hexadecimal Number and the encoding of characters
Introduction to C ProgrammingL2.32 Algorithms - Introduction In order to solve some problem, we need some description how to solve it. E.g. Cooking some eggs: How to cook eggs? 1.Put some water into a pot 2.Heat the water until it cooks 3.Put the eggs into the water 4.Wait 3 Minutes 5.Take the eggs out of the pot and cool them under floating water Such a description of a problem solution is called an Algorithm
Introduction to C ProgrammingL2.33 Algorithms described as Flowcharts put water into pot Heat water Water cooking ? Wait 3 Minutes No Yes Water in pot ? Yes No Take eggs out of pot Cool the eggs START END Our “Cook-eggs”-Algorithm as Flowchart:
Introduction to C ProgrammingL2.34 Flowchart Atoms Statement – Some operation as e.g. “put the eggs into water” put water into pot Statement
Introduction to C ProgrammingL2.35 Flowchart Atoms (cont.) Condition: Some yes/no question (condition). Depending on the answer Yes (True) or No (False) we go different ways. Condition No Yes
Introduction to C ProgrammingL2.36 Combined Flowchart Constructs If/else – alternative: Construct where select on of two alternative sequences of statements, depending on the result of the condition Condition YesNo Statement if sideelse side
Introduction to C ProgrammingL2.37 Combined Flowchart Constructs (cont.) If/else example: (Here we do nothing on one side, but this is ok) put water into pot Water in pot ? Yes No
Introduction to C ProgrammingL2.38 Combined Flowchart Constructs (cont.) Loop: Special construct with a Condition where one alternative of the Condition creates a circular flow Statement n Question Statement 1
Introduction to C ProgrammingL2.39 Combined Flowchart Constructs (cont.) Loop Example: Heat water Water not cooking ? YES
Introduction to C ProgrammingL2.40 Algorithmic Description Solutions for all realistic Problems can be algorithmically described by combing the introduced elements: –Statements –If/else alternatives –Loops
Introduction to C ProgrammingL2.41 Variables Variables are named containers that store some type of data, e.g. a number. Example: read x from user input x0 user input is 93 x93 Variable xValue of x User input is typically something typed on the keyboard
Introduction to C ProgrammingL2.42 Variables in Flowcharts Example: Calculation of the maximum of two numbers: read x from user input read y from user input x > y set max to xset max to y print max on output YesNo
Introduction to C ProgrammingL2.43 Exercise Take a piece of paper and draw a flowchart that: 1.reads the value of three variables x and y and z 2.calculates the minimum of the three variables read before