CS212 Programming-II for Engineers

37
CS212 Programming-II for Engineers Spring 2013 1

description

CS212 Programming-II for Engineers. Spring 2013. Course Material. Syllabus and other course information available at: dforeman.cs.binghamton.edu/~foreman Makefiles : http://www.gnu.org/software/make/manual/make.html http://www.cprogramming.com/tutorial/makefiles.html. Some rules for CS212. - PowerPoint PPT Presentation

Transcript of CS212 Programming-II for Engineers

Page 1: CS212 Programming-II for Engineers

1

CS212Programming-II

for Engineers

Spring 2013

Page 2: CS212 Programming-II for Engineers

2

Chapter Topic addenda

1 Basic Data Elements & Numeric arrays2 More ADTs & functions, Intro to Complexity3

Linear list structures & recursion1. Queues (using arrays)2. Linked lists

a. Stacks & Queues with pointersb. Prefix, postfix & infix notations

4 General Lists & Strings5 & 6 Searching, binary trees & Big O againclass slides only

1. C++ classes, objects, methods & "friends"

2. I/O, iostream, etc.

7 Sorting8 Hashing9 Trees (general)

Encoding & Compression (Huffman)

11 Graphs (time permitting)

Page 3: CS212 Programming-II for Engineers

3

Course Material

• Syllabus and other course information available at:–dforeman.cs.binghamton.edu/~foreman

• Makefiles:• http://www.gnu.org/software/make/manual/

make.html • http://www.cprogramming.com/tutorial/mak

efiles.html

Page 4: CS212 Programming-II for Engineers

Some rules for CS212

• This is primarily a course in Data Structures!– principles are language independent

• We will be using C and C++• Platforms– Lab: Linux – Cygwin is NOT acceptable– Programs submitted must compile using the GNU

compiler: G++

• Review makefiles. See links on previous page.

Page 5: CS212 Programming-II for Engineers

5

Some Course Goals• Use common organizations of data in RAM• Learn to evaluate efficiency– memory space (RAM) needed for storage– algorithms to manipulate the data

• Learn to define, implement and use – Structured data types– Basic Abstract Data Types (ADTs)

• Learn to use libraries of data structures – STL, Java Collection classes

Page 6: CS212 Programming-II for Engineers

6

ANSI C++ Compilers

• GNU compiler– open source software from the Free Software Foundation– www.gnu.org– available on Bingsuns & labs in LNG103– built-in on most Linux systems– Cygwin is a Linux-like environment (including the GNU compiler) for

Windows (sources.redhat.com/cygwin/) – UNACCEPTABLE!!• Microsoft Visual Studio

– integrated editor, compiler, linker, project manager (IDE)– installed on all Computer Center PCs and in Watson Microlab– free to students in Watson courses through the Microsoft Academic

Alliance (see Prof. Foreman's website for link)

Page 7: CS212 Programming-II for Engineers

Development Process

C & C++ are compiled languages

Java is an interpreted language

Source codeMyprog.cpp

Interpreter

Object Code fileMyprog.o

Executable fileMyprog.exe

CPU

Source codeMyprog.java

Compiler

byte-code fileMyprog.class

CPU

MUST have interpreter to run Java pgm

Page 8: CS212 Programming-II for Engineers

8

Data + Algorithms = Programs

• Every program processes data• Data is stored in memory (RAM) at run-time• Java, C, C++ are strongly typed languages– all data items have a type associated with them

• Data to be processed must be declared as data objects (variables) using this syntax (for C, C+++ & Java):

type name;type name = value;

• Type of a data object determines– Allowable operations (+ - * / etc.)– how data is represented in memory (integer, float, etc.)

Page 9: CS212 Programming-II for Engineers

Program structure – pt 1

main

....f1

fn

-preprocessor directives (control compilation) (include header files}-global declarations (constants and types only!)-function prototypes (names & parameters only)

myProg.c or myProg.cpp

function definitions(implementations)

Page 10: CS212 Programming-II for Engineers

10

compile / link / execute

Myprog.cpp Yourprog.cpp #include “myinfo.h” #include “myinfo.h”

Myprog.o Yourprog.o

Ourpgm.exe (a.out is a default name)

object's methods

Page 11: CS212 Programming-II for Engineers

11

Linux Compiler Commands

g++ -o Ourpgm Myprog.o Yourprog.oproduces Ourpgm

g++ -c Myprog.cppproduces Myprog.o

g++ -c Yourprog.cppproduces Yourprog.o

./Ourpgmexecutes the program

compileonly

link

execute

g++ Myprog.cppproduces a.out

compile& link

Page 12: CS212 Programming-II for Engineers

12

Types

• Pre-defined (built-in) types– scalar (atomic) types – store a single value

• int• char• float, double• bool

– structured types – store a collection of values• Most languages have libraries of types– STL for C++– Java library

• Programmer-defined types – create new "types" appropriate for your problem– built from pre-defined types

Page 13: CS212 Programming-II for Engineers

13

Types - 2

• An int is 8, 16, 32 or 64 bits – defined at compile time

• Size of float/double depends on machine arch.• A char is USUALLY 8 bits– Has a numeric value 0-255– Represents a printable symbol– Some embedded systems may have 16 bit char's– Arithmetic with a char is invalid (e.g.; char+char)

• A bool is a single T/F value – – stored as a whole byte(?) - Compiler defined

Page 14: CS212 Programming-II for Engineers

14

typedef

• Allows using the name of an element as a datatype

• Does NOT reserve space for the element!!!• Uses no memory

Page 15: CS212 Programming-II for Engineers

15

Types - 3

• uint8_t is a typedef for unsigned char• Why use it?– Indicates intent – you will do math with it.– Char is printable data in range 32-126 (decimal)– 0-31 and 127-255 are for other uses• but all 256 values are legal

– Examples:unsigned char i, x='a', y=0x01; i=x+y; // unclearuint8_t x='a', y=0x01; i=x+y // is clear.(both output 'b' as the value of i)

Page 16: CS212 Programming-II for Engineers

16

C++ Types

CharactersIntegral Floating point

(reals)

IntegersEnumerations

Arithmetic void pointer

bool complex

Scalar Types

Structured Types

priority_queue

valarray

vectordequelist

set

map

multiset

multimap

stackqueue

string

bitset

istreamostream

iostreamifstreamofstreamfstream

C++ StandardLibrary classes

arraystructunionclass

intshort intlong intunsignedshort unsignedlong unsigned

charunsigned charsigned char

floatdoublelong double

Composite Types

Page 17: CS212 Programming-II for Engineers

17

C vs. C++

• C++ is a superset of C– allows ALL of C syntax– adds NEW syntax for • objects• I/O• namespaces

• Any C program is a valid C++ program– even if it does not use any of the ++ syntax– compiler knows by the file extension • c vs. cpp

Page 18: CS212 Programming-II for Engineers

namespaces (C & C++)

• "namespaces" allow you to assign portions of your program to different namespaces– variable names are local so they may be reused in a

program as long as the uses are in different namespacesusing namespace std;– the namespace “std” is a little special• you don’t have to specify the “.h” for all standard

#includes• e.g.; #include <iostream>

#include <iomanip>

Page 19: CS212 Programming-II for Engineers

19

Structured data types – C arrays

• One name for a collection of items• Subscripted (as in standard math notation)– X3 is represented as X[3]– There are no subscript keys on a keyboard!

• Multiple values– X[0], X[1], etc.– All elements are same type– Max # elements must be a constant (in C, C++, Java)

(for non-dynamic arrays)int x[20];float y[2012];

Page 20: CS212 Programming-II for Engineers

20

Arrays - 2

int X[5];

x[3]=17;

X[0] X[1] X[2] X[4]X[3]

17

X[0]

Page 21: CS212 Programming-II for Engineers

21

Arrays - 3

• C does not have an "array" data type• C uses a simple variable with subscript notation:

int x[5]; // BUT– max subscript value in definition must be a constant– int x[y]; // is ILLEGAL, even if y has a fixed value

• all arrays start at element 0– above is x[0] … x[4]

• C allows multi-dimensioned arrays (like Xijk)

int y[3][4][2]; y[0][2][1]=17;

Page 22: CS212 Programming-II for Engineers

22

Arrays - 4• compiler ALWAYS reserves memory for the ENTIRE array,

whether it is used or not• arrays may be ANY data type, including structs• no protection on accessing beyond real size

int x[5]; x[5]=3; // ERROR at RUNTIME

compiler might not detect it!!!!!the array has 5 items, numbered 0-4int j; scanf("enter j%i",j); x[j]=3;

compiler CANNOT detect it!!!!!

Page 23: CS212 Programming-II for Engineers

23

Structured data types - more

• "struct" – a simple collection of items• "union" – multiple types for the same RAM

bytes– union {char a,b,c,d; int X;}– "a" is the leftmost byte of "X"

• "class" – data + functions that operate on it– this is in C++,later in course

• All allow collections of dissimilar types

Page 24: CS212 Programming-II for Engineers

24

struct's

• A way to combine basic elements– Create collections of elements– Treat them separately AND/OR as a collection– Use them to create more complex elements

• Complex numbers– Real part– Imaginary part

Page 25: CS212 Programming-II for Engineers

25

struct's – an example

struct Complx{float my_real_part; float my_imag_part;}; // note the semicolon!!!!!

Complx c; // "c" now refers to BOTH partsc.my_real_part=5.2;c.my_imag_part=3.6;// this is equivalent to 5.2+3.6j

Page 26: CS212 Programming-II for Engineers

26

Pointers• a pointer is a memory address (points to some data)• lets you refer to data without the data's nameint x[5] ; // this takes up 20 bytes 5*(4 bytes/int)int *z; // z is a pointer to an int and is 4 bytesint (*y)[5];// uses only 4 bytes

y is a pointer to an array of 5 ints

y=&x; // y now points at X (≠ X)z=&x[3]; // z now points to x[3] (has x's address)

// z does not EQUAL the value in X[3]int *P[8]; // array of 8 "pointers to int's" (8*4bytes)

NOT the integers themselves!!!!!!

Page 27: CS212 Programming-II for Engineers

27

Dynamic allocation

• Often need to make space at runtime– Size/amount of data not pre-defined– Data may need to be ordered by some rule (e.g.; "<")

Complx * p; // defines ONLY the POINTER, p// p "points" to a Complex data type

p=new Complx; //reserves RAM, p points to itp->my_real_part=3.5; p->my_imag_part=5.6;// equivalent to 3.5+5.6j

Page 28: CS212 Programming-II for Engineers

28

Abstract Data Types (ADTs)

• Collection of data items + operations for it• Independent of programming language• 2 parts:– Definition – of data and operations allowed– Implementation – how data is stored and algorithms to

carry out the operations• User – – uses the ADT to solve a problem; – doesn't need to know the implementation details– Needs to know the syntax rules for the ADT

Page 29: CS212 Programming-II for Engineers

29

The Basic Concept

data

An ADT encapsulates data and the operations on that data.

The data can be accessedonly via the operations & operators.

Operations(methods)

Page 30: CS212 Programming-II for Engineers

30

ADT vs. Class

• ADT: a model of data AND its related functions• C++ Class: a syntactical & programmatic

element for describing how the functions and data are related

• An ADT implementation has several parts:– interface function-names (methods)– operators (possibly re-defined symbols)– data

• Any/all of these may be public or private

Page 31: CS212 Programming-II for Engineers

31

ADTs - example

struct Complx{ float my_real_part;

float my_imag_part;}; // note the semicolon!!!!!

• All elements "visible"

Page 32: CS212 Programming-II for Engineers

32

C++ console I/O

• #include <iostream>• basic operators– << the "insertion" operator– >> the "extraction" operator

• stream names for standard I/O– cin is the input "file"– cout is the output "file"

• usage– cin>>x; // get a value– cout<<x; // output a value

Page 33: CS212 Programming-II for Engineers

33

Operators• Ordinary variables have basic operators built-in

+ - * / % | & || &&

• New objects (structs, classes) may need more• How do you "add" 2 complex numbers?• Given: complex#'s a and b; – what does a+b mean???– compiler knows nothing about complex #'s

• Define a NEW action (function) to perform "+"– add the real parts, add the imaginary parts– store each result in the proper answer-part.

Page 34: CS212 Programming-II for Engineers

34

Example – Declare the functionsstruct Complx{ float my_real_part,

my_imag_part;};

// below are member functions (i.e.; "methods") float Complx_get_real(return my_real_part); // not

shown float Complx_init(set my_real_part); // not shown Complx Complx_add(add 2 complexes); // not shown

// orange: declare the structure, green: use it, red: return-value

Page 35: CS212 Programming-II for Engineers

35

Example- implementation// no automatic functions for initializationComplx x;Complx_init(Complx *x, float a, float b) { x.my_real_part=a;

x.my_imag_part=b; }Complx Complx_add (Complx a, Complx b) {Complx tmp; // need a place for output tmp.my_real_part = a.my_real_part + b.my_real_part; tmp.my_imag_part = a.my_imag_part + b.my_imag_part; return tmp; }// orange: declare the structure, green: use it, red: return-value

Page 36: CS212 Programming-II for Engineers

36

Example-pt 2

void main(){ Complx A, B, C;

init_Complx (*A,2,2); init_Complx (*B,1,1);

C=Complx_add(A,B); printf("C=%d+%dj",C.myreal_part, C.my_imag_part);}

Page 37: CS212 Programming-II for Engineers

37

Program structure – 2

• Usually, put the struct definition in a header file

• #include it later in BOTH :– the implementation file • where the methods are defined

– the user-program file • where methods get used