cps120 introduction to computer science final exam review

105
CPS120 Introduction to Computer Science Final Exam Review

Upload: silas-toby-ball

Post on 31-Dec-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

CPS120 Introduction to Computer Science

Final Exam Review

Terminator. Shows the starting and ending points of the program. A terminator has flow lines in only one direction, either in (a stop node) or out (a start node).

Data Input or Output. Allows the user to input data and results to be displayed.

Processing. Indicates an operation performed by the computer, such as a variable assignment or mathematical operation. With a heading – an internal subroutine

Decision. The diamond indicates a decision structure. A diamond always has two flow lines out. One flow lineout is labeled the “yes” branch and the other is labeled the “no” branch.

Predefined Process. One statement denotes a group of previously defined statements. Such as a function or a subroutine created externally

Connector. Connectors avoid crossing flow lines, making the flowchart easier to read. Connectors indicate where flow lines are connected. Connectors come in pairs, one witha flow line in and the other with a flow line out.

Off-page connector. Even fairly small programs can have flowcharts that extend severalpages. The off-page connector indicates the continuation of the flowchart on another page. Just like connectors, off-page connectors come in pairs.

Flow line. Flow lines connect the flowchart symbols and show the sequence of operations during the program execution.

Common Flowchart Symbols

Common Flowchart Symbols

Rules for Pseudocode1. Make the pseudocode language-independent

2. Indent lines for readability

3. Make key words stick out by showing them capitalized, in a different color or a different font

4. Punctuation is optional

5. End every IF with ENDIF

6. Begin loop with LOOP and end with ENDLOOP

7. Show MAINLINE first; all others follow

8. TERMINAE all routines with an END instruction

Truth Tables

• Use this truth table to determine the results of the logical operators. In this table, 1 represents TRUE and 0 represents FALSE.

• Note that the ! symbol (the logical NOT operator) changes a TRUE to a FALSE.

AND OR NOT A B A && B A B A || B A !A 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1

1 1 1 1 1 1

Sample Switch Structure

switch (character_entered){case ‘A’ :

cout << “The character entered was A.\n”;break;

case ‘B’:cout << “The character entered was B.\n”;

default:cout << “Illegal entry\n”;

}

Syntax & Logic Errors

• A syntax error is simply the violation of the rules of a language; misuse of structure and form in programming or a violation of the compiler’s rules. These errors are detected by the compiler– Also know as 'fatal compilation errors'

• A logic error is a mistake that complies with the rules of the compiler that causes the program to generate incorrect output

Compiling and Debugging

• Executable code will not be created until you correct all of the syntax errors in your source code

Computer Mathematics

Representing Data

• The computer knows the type of data stored in a particular location from the context in which the data are being used; – i.e. individual bytes, a word, a longword, etc– 01100011 01100101 01000100 01000000

• Bytes: 99(10, 101 (10, 68 (10, 64(10

• Two byte words: 24,445 (10 and 17,472 (10

• Longword: 1,667,580,992 (10

Alphanumeric Codes

• American Standard Code for Information Interchange (ASCII)– 7-bit code– Since the unit of storage is a bit, all ASCII

codes are represented by 8 bits, with a zero in the most significant digit

– H e l l o W o r l d– 48 65 6C 6C 6F 20 57 6F 72 6C 64

Decimal Equivalents

• Assuming the bits are unsigned, the decimal value represented by the bits of a byte can be calculated as follows:

1. Number the bits beginning on the right using superscripts beginning with 0 and increasing as you move left• Note: 20, by definition is 1

2. Use each superscript as an exponent of a power of 23. Multiply the value of each bit by its corresponding

power of 24. Add the products obtained

Binary to Hex

• Step 1: Form four-bit groups beginning from the rightmost bit of the binary number– If the last group (at the leftmost position) has less than

four bits, add extra zeros to the left of the group to make it a four-bit group

• 0110011110101010100111 becomes• 0001 1001 1110 1010 1010 0111

• Step 2: Replace each four-bit group by its hexadecimal equivalent– 19EAA7(16

Converting Decimal to Other Bases

• Step 1: Divide the number by the base you are converting to (r)

• Step 2: Successively divide the quotients by (r) until a zero quotient is obtained

• Step 3: The decimal equivalent is obtained by writing the remainders of the successive division in the opposite order in which they were obtained– Know as modulus arithmetic

• Step 4: Verify the result by multiplying it out

Representing Negatives

• It is necessary to choose one of the bits of the “basic unit” as a sign bit– Usually the leftmost bit– By convention, 0 is positive and 1 is negative

• Positive values have the same representation in all conventions

• However, in order to interpret the content of any memory location correctly, it necessary to know the convention being used used for negative numbers

Sign-Magnitude

• For a basic unit of N bits, the leftmost bit is used exclusively to represent the sign

• The remaining (N-1) bits are used for the magnitude

Sign-magnitude Operations

• Addition of two numbers in sign-magnitude is carried out using the usual conventions of binary arithmetic– If both numbers are the same sign, we add their

magnitude and copy the same sign– If different signs, determine which number has the

larger magnitude and subtract the other from it. The sign of the result is the sign of the operand with the larger magnitude

– If the result is outside the bounds of –2 n+1 to +2 n-1 –1, an overflow results

One’s Complement

• Positive numbers are represented in the usual way

• For negatives– STEP 1: Start with the binary representation of the

absolute value– STEP 2: Complement all of its bits

One's Complement Operations

– Treat the sign bit as any other bit– For addition, carry out of the leftmost bit is

added to the rightmost bit – end-around carry

Two’s Complement Convention

• A positive number is represented using a procedure similar to sign-magnitude

• To express a negative number1. Express the absolute value of the number in binary2. Change all the zeros to ones and all the ones to zeros (called

“complementing the bits”)3. Add one to the number obtained in Step 2

– The range of negative numbers is one larger than the range of positive numbers

– Given a negative number, to find its positive counterpart, use steps 2 & 3 above

Two’s Complement Operations

• Addition:– Treat the numbers as unsigned integers

• The sign bit is treated as any other number

– Ignore any carry on the leftmost position

• Subtraction– Treat the numbers as unsigned integers– If a "borrow" is necessary in the leftmost place,

borrow as if there were another “invisible” one-bit to the left of the minuend

Introduction to C++

Variable Names

• Choose your own variable names but you must be careful to use valid ones: – do not use keywords that are defined in the

programming language (Reserved Words)– do not include spaces or other disallowed

characters– do not use more than 255 characters– do begin the identifier with a letter

Declaring & Initializing Variables

• In C++ all variables must be declared before they can be used.– Declare a variable by indicating its type and name

• int myVariable;

• C++ does not automatically initialize all variables to the value 0

• If you do not initialize a variable, the variable will have an indeterminate value.

• Initialize your variables at the same time that you declare them.– int myVariable = 0;

Constants

• Sometimes you need to use the same value many times throughout a program. In this case, it is proper to use a constant rather than a variable

• Constants allow you to give a name to a value used several times in a program

• The value never changes

The Assignment Operator

• The assignment operator is the equal symbol (=) • The assignment operator changes the value of the

variable to its left after evaluating the expression on its right

• For example:– sum = 3 + 1000;

• The variable sum ends up with the value 1003

– salary = 40000;– poundsPressure = 15 + 12;– sum = original + 300;– salary = salary + raise;

Common Arithmetic Operators

+ for addition

- for subtraction

* for multiplication

/ for division

% for modulus (like finding the remainder of a division problem)

Increments and Decrement• The incrementing (++) and decrementing (--)

operators are useful at times if used carefully • counter++;

• is equivalent to counter = counter + 1; and counter += 1;

• counter--; • is equivalent to counter = counter - 1; and counter -=

1;

• Use the incrementing and decrementing operators with variables in statements such as these, that is with no other operators or code except the variable name that is being incremented or decremented.

Using Relational Operators

• Relational operators provide the tools with which programs make decisions

== equal to NOTE: this is two equals symbols next to each other, not to be confused with the assignment operator, => greater than< less than>= greater than or equal to<= less than or equal to!= not equal to

Order of Logical Operations

• Logical operators may be mixed within evaluation statements but the following order of preference must be respected:

1. NOT operator (!)

2. AND operator (&&)

3. OR operator (||)

Complete order of operations

• The complete order of operations including all of the arithmetic, relational, and logical operators including all of the basic arithmetic, relational, & logical operators is:*, /, %

+, -

<, >, <=, >=, ==, !=

!

&&

||

String Literals

• A string literal is a sequence of characters that is used in a C++ program between double quotes such as in the statementcout << "Hello world!";where "Hello world!" is the string literal

• Similar to a constant• Ends with an invisible null terminator (ASCII 0)

– Represented as \0

Character Arrays

• Used to store strings that change as the program runs– Unlike string literal

• An array is a group of variables of the same data type that appear together in memory– In this case each variable holds a character and

the last variable in the string holds the null terminator (/0)

Using Strings In Programs

• In order to use string variables within any C++program, you must use the compiler directive:

#include <string.h>

using namespace std;

Input Operations• The operator >> is known as the input

operator. It is also known as the extraction operator

• You use the input operator in statements like,

cin >> numItems;

which would allow the user to input a value to be stored in the variable numItems.

Complexities of Word Input• Some things are done automatically with >>

– get does not skip over line breaks and spaces

• If the user enters a string longer than the length specified in the call to the get function, the remaining characters are left in the input stream

• Get always ignores the new line character (‘\n’) and leaves it in the stream

• Use the ignore function to flush the contents of the input stream

cin.ignore(80, ‘\n’);

Using setf and unsetf• Each stream has format options that can be

changed

OPTION DESCRIPTIONleft Left-justifies the output

right Right-justifies the output

showpoint Displays decimal point and trailing zeros for floats

uppercase Displays e in scientific as E

showpos Displays a leading plus sign

scientific Displays floating point number scientifically

fixed Displays floating-point in normal notation

Using Manipulators

• You must include the <iomanip.h> header file at the top of your program in order to use the setprecision, setw, and other manipulators. You must use place the following compiler directive at the top of your program.#include <iomanip.h>

• I/O manipulators are placed directly in the output statementcout << setprecision(2) << price << ‘\n’;

Decision Making in C++

1. if statement

2. switch statement

3. ? conditional operator statement

4. goto statement

IF-THEN

Test Test condition pcondition p

falsefalse truetrue

EntryEntry

ExitExitTrue True

statement astatement a

IF…ELSE

falsefalse truetrue

EntryEntry

ExitExit

Test Test condition pcondition p

““true” true” statement astatement a

““false” false” statement astatement a

General Form if (test expression)

{

True-block statements;

}

else

{

False-block statements;

}

next statement;

General Form if (test expression)

{

True-block statements;

}

else

{

False-block statements;

}

next statement;

Switch Structure

• The switch structure is a multiple-selection structure that allows even more complicated decision statements than a two-way if/else structure allows.

• Only variables with the INT or CHAR data types may be used in the control expressions (i.e. parentheses) of switch statements. – Single quotes must be used around CHAR variables

– Single quotes are NOT used around the integer values

Iteration

• A program loop is a form of iteration. A computer can be instructed to repeat instructions under certain conditions.

No

Syntax of a for Loop

for (initializing expression; control expression; step expression){ // one or more statements}

• The initializing expression sets the counter variable for the loop to its initial value.

• The control expression ends the loop at the specified moment.

• The step expression changes the counter variable• Semi-colons, not commas, divide the expressions

WHILE Loop

NoNo

YesYes

EntryEntry

ExitExit

Test Test condition pcondition p

Loop Loop statement astatement a

While Loop Syntax

while (control expression){ // one or more statements}

• The control expression must evaluate to TRUE in order for the while loop to iterate even once

DO WHILE Loop

Loop Loop statement astatement a

NoNo YesYes

EntryEntry

Test Test condition pcondition p

ExitExit

Do While Syntax

do{ // body statements would be placed here}while (control expression);

• Don't forget to include the required semicolon after the control expression

In Summary

• Loops– for -- fixed number of loops – while -- may never be run– do … while -- always run once

• continue causes while, do… while, and for loops to start over

• break causes while, do … while, for and switch statements to end

An Example of A Function#include <iostream.h> void printMyMessage(int numOfTimes); // PROTOTYPE and NAME

int main( ) { int userInput = 0; cout << "Enter a number between 1 and 10 (0 to Exit): " ; cin >> userInput; if (userInput != 0) { printMyMessage (userInput); // CALL STATEMENT WITH ACTUAL PARAMETER } else cout << "Thanks, Bye!";

return 0;} // end of main

void printMyMessage(int numOfTimes) // FUNCTION HEADER W/ RETURN TYPE & ACTUAL PARAMETER

{ int i=0; / LOCAL VARIABLE WITHIN THE FUNCTION for (i=0; i<= numOfTimes; i++) // BODY

{cout << "Let's Go State!!" << endl;} // OF THE} //end of printMyMessage // FUNCTION

Scope of Variables

• The scope of a variable is the area in which it can be legally referenced – Variables are either global or local in nature

• Global variables can be used in any function throughout the program.

• Local variables are ones that are declared inside of a function, including main. They cannot be used or referred to in other functions

– It is not wise to use global variables any more than you have to

Passing Data

• Data is passed to functions as arguments • When a function is "called" by the main function one

or more arguments are passed to the function• On the receiving end, the function accepts these

arguments • The variable names of the arguments from the

"calling" function do not have to be the same as the names in the "called" function. – The data types of the arguments and the parameters should

match exactly

Required Compiler Directives

• Any program that uses file pointers must include the fstream.h header file with the compiler directive,

#include <fstream.h>

at the top of the program

Opening Output Files• Opening a sequential-access file

ofstream outfile; – ofstream is a C++ keyword indicating the type of

pointer that you created – outfile is simply the programmer's chosen name

for the file pointer (and can be any valid name)

• Open the file "mydata.txt" that is stored on your PC's hard drive

outfile.open("mydata.txt", ios::out);

Opening Input Files• Declare a file pointer as an ifstream object

with:ifstream infile;

– ifstream is a keyword and infile is the name for the file pointer.

– infile is simply the programmer's chosen name for the file pointer (and can be any valid name)

• Open the actual file for reading with:infile.open("mydata.txt", ios::in);

Writing Output

• To write data to a sequential-access data file you would use a statement like:

outfile << "John Doe" << endl;

to print that name to the next line in the data file pointed to by the file pointer, outfile.

Appending Data

• Adding data to the end of a sequential-access data file is called appending

• Open the file using the ios::app stream operation mode as in:

outfile.open("myfile.txt", ios::app);• where the app is short for append.

Detecting the End of a File.

• Use the eof function to determine whether the end of a sequential-access file has been reached.

• This function returns a 1 (true) if an attempt has been made to read past the end of the file.

do{ infile >> x;

if ( !infile.eof( ) ) { cout << x << endl; }

} while ( !infile.eof( ) );

Pointer Use in C++.• A pointer is a variable or constant that holds

a memory address– a) Hexadecimal numbers are used for

representing memory locations

Address ValueName

216793

216794 216801 iptr

216801 3 i

216802

Intializing Pointers

• Declare pointers before use, as with other variables.

• Each variable being declared as a pointer must be preceded by an asterisk (*).

• Initialize pointers before use to a 0, NULL or an address to prevent unexpected results

Pointer Operators

• & is the address operator which returns the address of its operand

• * is the indirection operator or dereferencing operator and returns the value to which the operand (pointer) points.

• sizeof - used to determine the size of an array during program compiliation

Structures

• Structures group variables together in order to make one's programming task more efficient. – Any combination of variables can be combined into

one structure. – This is a useful and efficient way to store data.

struct Student { string socSecNum; string lastName; string firstName; int pointsEarned; double gpa; };

Arrays: A Definition

• A list of variables accessed using a single identifier– May be of any data type

• Can be single or multi-dimensioned

• Vector classifications are object-oriented representations of arrays

Declaring an Array• To declare an array before it is used in the body of

your program, you must use a statement like:

int scores[10];• In this case, scores can store up to 10 different

integer values. – The positions of the array are identified by their index

positions which run from 0 to 9 (not 1 to 10.)

• Each one of the 10 variables in scores is called an element

Initializing an Array

• If you wish to initialize each element of an array to a specific value, you can use the statement,

int scores[] = {65, 76, 45, 83, 99};

• You don't even have to specify a size of the array in this case since the initialization statementwould cause the compiler to declare an array of size 5 since there are five values in the set of curly braces

Declaring a Multi-dimensional Array

• To declare an array of integers called studentGrades to be a 2-dimensional array with 3 rows and 4 columns, you would use the statement:

int studentGrades[3] [4];

where the first integer value is used to specify the number of rows in the array and the second value specifies the number of columns

• Think of remote control

Initializing a Multi-dimensional Array

• You can initialize the 2-dimensional array when you declare it by using commas and braces appropriately

int studentGrades[3] [4] = {

{ 1, 2, 3, 4},

{ 5, 6, 7, 8},

{ 9, 10, 11, 12}

};

Other Programming Concepts

Approaches to Sorting

• There are two basic approaches to sorting data– The incremental approach

– The divide and conquer approach.

• Using the incremental approach, one sorts the whole list at once

• The divide and conquer approach splits the list up into parts and sorts each part separately.

Selection Sort

Example of a selection sort (sorted elements are shaded)

The Insertion Sort

• The insertion sort is incremental in nature.

• This is similar to the way a person usually organizes a hand of playing cards.

• The insertion sort is relatively quick for small lists that are close to being sorted

Insertion Sorting

Mary Mary Gerri

Terry Gerri Kari

Gerri Kari Harry

Kari Harry Barry

Harry Barry Mary

Barry Terry Terry

Bubble Sort

• Starting with the last list element, we compare successive pairs of elements, swapping whenever the bottom element of the pair is smaller than the one above it

Bubble Sort

Example of a bubble sort

Understanding the Quick Sort

• The quicksort is a divide and conquer algorithm and is more efficient than incremental sorts. It can be difficult to code though since it uses recursion or stacks.

• The original list is partitioned into two lists. – One of the lists contains elements that are

greater than the first original element. – The second list contains elements that are less

than or equal to the first original element.

Quicksort

Sequential Searching

• Although there are more efficient ways to search for data, sequential searching is a good choice of methods when amount of data to be searched is small.

• You simply check each element of an array position by position until you find the one that you are looking for.

• In any search, the item upon which the search is based is called the key and the field being searched is called the key field.

Binary Search

• A binary search looks for an item in a list using a divide-and-conquer strategy– Binary search algorithm assumes that the items in the list being

searched are sorted

– The algorithm begins at the middle of the list in a binary search

– If the item for which we are searching is less than the item in the middle, we know that the item won’t be in the second half of the list

– Once again we examine the “middle” element (which is really the item 25% of the way into the list)

– The process continues with each comparison cutting in half the portion of the list where the item might be

Binary Search

• [0] Ant

• [1] Cat

• [2] Chicken

• [3] Cow

• [4] Deer

• [5] Dog

• [6] Fish

• [7] Goat

• [8] Horse

• [9] Monkey

• [10] Snake

Trace of the binary search

Key Computing Concepts

What Is a Network

• A network is a group of connected computers that allow people to share information and equipment

Small Networks

• Peer-to-Peer:– Used for a small number of computes (e.g. 10)– Files stored on own computers; access given to

them to others on the network

The Networking Revolution

• Computer networks have permanently altered the world of computing with the client/server model

Client/Server interaction

Types of Networks

• A bus technology called Ethernet has become the industry standard for local-area networks

Various network topologies

Ethernet

• A bus technology called Ethernet has become the industry standard for local-area networks– Most popular and least expensive solution– Each computer waits for a pause before sending

information– Collisions between information often occur

• Computers wait a moment, then resend

Packet Switching

• To improve the efficiency of transferring information over a shared communication line, messages are divided into fixed-sized, numbered packets

• Network devices called routers are used to direct packets between networks

Messages sent by packet switching

TCP/IP

• TCP stands for Transmission Control Protocol– TCP software breaks messages into packets, hands

them off to the IP software for delivery, and then orders and reassembles the packets at their destination

• IP stands for Internet Protocol– IP software deals with the routing of packets through

the maze of interconnected networks to their final destination

Firewalls

• A firewall is a machine and its software that serve as a special gateway to a network, protecting it from inappropriate access

– Filters the network traffic that comes in, checking the validity of the messages as much as possible and perhaps denying some messages altogether

– Enforces an organization’s access control policy

Network Addresses

• An IP address can be split into– network address, which specifies a specific network

– host number, which specifies a particular machine in that network

An IP address is stored in four bytes

Domain Name System

• A hostname consists of the computer name followed by the domain name

• orchard.wccnet.org is the domain name– A domain name is separated into two or more sections

that specify the organization, and possibly a subset of an organization, of which the computer is a part

– Two organizations can have a computer named the same thing because the domain name makes it clear which one is being referred to

Internet Fundamentals

• Dates from DARPA in the 1960s• Consists of thousands of connected

networks around the world– Each organization on the Internet is responsible

for maintaining its own equipment• These organizations allow you to pass-through their

nets

• Designed to provide multiple routing to bypass disabled computers

The World Wide Web

• The Web is an infrastructure of distributed information combined with software that uses networks as a vehicle to exchange that information

• A Web page is a document that contains or references various kinds of data, such as text, images, graphics, and programs

• Web pages also contain links to other Web pages so that the user can “move around” as desired

Web Browser

Figure 16.2 A browser retrieving a Web page

Create & Publish Web Pages

• HyperText Mark-up Language is a computer code used to create Web pages

• There are many programs available, called visual editors which can help you create Web pages without having to learn HTML

• Publishing your pages – loaded to an addressable server

Interactive Web Pages

• When HTML was first developed, there was no way to interact with the information and pictures presented in a Web page

• As users have clamored for a more dynamic web, new technologies were developed to accommodate these requests

• Many of the new ideas were offshoots of the newly developed Java programming language

XML

• XML is a metalanguage

• A metalanguage is a language for talking about, or defining, other languages

Object-Oriented Paradigm

• Data should be placed inside the objects and that these objects should communicate with each other in the form of messages

Thinking Object-Oriented

• Think in an object-oriented way– E.g. an answering machine encapsulates the

functions of an answering machine with the data (messages).

• The buttons are the equivalent of sending messages to the machine

Encapsulation

• Encapsulation is a language feature that enforces information hiding– Both data and methods are contained within an

object

Inheritance

• Inheritance fosters reuse by allowing an application to take an already-tested class and derive a class from it that inherits the properties the application needs

Polymorphism

• Polymorphism: the ability of a language to have duplicate method names in an inheritance hierarchy and to apply the method that is appropriate for the object to which the method is applied

Designing A Class

• A class is a language construct that is a pattern for an object and provides a mechanism for encapsulating the properties and actions of the object class– We instantiate the class– Private and public are called access modifiers

OOP Advantages: Reusability

• Reusability is a major benefit of object-oriented programming

Public vs. Private• Private: Cannot be accessed outside the object• Public: Can have access to all the variables and

functions public:

// constructors circle(); // default constructor circle(const circle &); // copy constructor // member functions void SetRadius(float); double Area();

private: // data float radius;