CS1101: Programming Methodology Recitation 3 – Control Structures.

19
CS1101: Programming Methodology Recitation 3 – Control Structures

Transcript of CS1101: Programming Methodology Recitation 3 – Control Structures.

Page 1: CS1101: Programming Methodology Recitation 3 – Control Structures.

CS1101: Programming Methodology

Recitation 3 – Control Structures

Page 2: CS1101: Programming Methodology Recitation 3 – Control Structures.

2

Checksum Validation

Objective: Develop a program that validates a Universal Product Code (UPC) number.

A valid UPC is a 12 digit value that meets the criteria:• m is the sum of 2nd, 4th, 6th, 8th, 10th digits• n is the sum of the 1st, 3rd, 5th, 7th, 9th, 11th

digits• r = 10 – ((m + 3.n) mod 10)• Valid UPC number if 12th digit is equal to r

Page 3: CS1101: Programming Methodology Recitation 3 – Control Structures.

3

Checksum Validation

Example: 780070121354m = 8 + 0 + 0 + 2 + 3 = 13n = 7 + 0 + 7 + 1 + 1 + 5 = 21r = 10 – ((13 + 3.21) mod 10)

= 10 – (76 mod 10) = 10 – 6 = 4

Example: 123456789011m = 2 + 4 + 6 + 8 + 0 = 20n = 1 + 3 + 5 +7 + 9 + 1 = 26r = 10 – ((20 + 3.26) mod 10)

= 10 – (98 mod 10) = 10 – 8 = 2

Page 4: CS1101: Programming Methodology Recitation 3 – Control Structures.

4

Analysis and Design:

− Values m, n and r

− Input string s and its numeric representation number

− With number, the 12 component digits d1, d2 …, d12 can be determined for initializing m, n and r

Page 5: CS1101: Programming Methodology Recitation 3 – Control Structures.

Analysis and Design:

− Prompt user to supply 12 digit number− Extract input and assign to s− Convert s to a numeric representation number.− If number is negative or has more than 12 digits

Then report number is not a UPC codeElse Assign least significant (12th) digit of number

to d12 Assign 11th digit of number to d11

: Assign 1st digit of number to d1 Compute m = d2+d4+d6+d8+10 Compute n = d1+d3+d5+d7+d9+d11 Compute r = 10 – ((m – 3.n) mod 10) If r = d12 Then report number is a feasible UPC code Else report number is not a UPC code

Page 6: CS1101: Programming Methodology Recitation 3 – Control Structures.

// Checks whether a user-specified value meets the UPC criteria

import java.io.*;

public class UPC {// main(): application entry pointpublic static void main(String[] args) throws IOException {

final long MAX_POSSIBLE_UPC_CODE = 999999999999L;

// set input stream and get numberBufferedReader stdin = new BufferedReader(

new InputStreamReader(System.in));

System.out.print("Enter a 12-digit whole number: ");String s = stdin.readLine();

long number = Long.parseLong(s);

max int value is only 10 digits. Use long to represent UPC code

Page 7: CS1101: Programming Methodology Recitation 3 – Control Structures.

// determine whether number is a possible upc codeif ((number < 0) || (number > MAX_POSSIBLE_UPC_CODE)) {

// not a upc codeSystem.out.println(s + " is an invalid UPC code");

}else { // might be a upc code, determine individual digits

int d12 = (int) (number % 10); number /= 10;int d11 = (int) (number % 10); number /= 10;int d10 = (int) (number % 10); number /= 10;int d9 = (int) (number % 10); number /= 10;int d8 = (int) (number % 10); number /= 10;int d7 = (int) (number % 10); number /= 10;int d6 = (int) (number % 10); number /= 10;int d5 = (int) (number % 10); number /= 10;int d4 = (int) (number % 10); number /= 10;int d3 = (int) (number % 10); number /= 10;int d2 = (int) (number % 10); number /= 10;int d1 = (int) (number % 10); number /= 10;

% - Java modulus operator

Page 8: CS1101: Programming Methodology Recitation 3 – Control Structures.

// compute sums of first 5 even digits and the odd digitsint m = d2 + d4 + d6 + d8 + d10;int n = d1 + d3 + d5 + d7 + d9 + d11;

// use UPC formula to determine required value for d12int r = 10 - ((m + 3*n) % 10);

// based on r, can test whether number is a UPC codeif (r == d12) {// is a upc codeSystem.out.println(s + " is a feasible UPC code");}else {// not a upc codeSystem.out.println(s + " is an invalid UPC code");}}}

}

Page 9: CS1101: Programming Methodology Recitation 3 – Control Structures.

Nested if statements

if (testScore >= 70) {if (studentAge < 10)

System.out.println (“You did a great job!”);else System.out.println (“You did pass”); //test score >= 70 and age >=10

}else System.out.println (“You did not pass”); //test score < 70

if (testScore >= 70 && studentAge < 10) {System.out.println (“You did a great job!”);

}else { //either test score < 70 OR age >=10

if (testScore >= 70) System.out.println (“You did pass”);

else System.out.println (“You did not pass”);}

Print three messages depending on test score and student age

Page 10: CS1101: Programming Methodology Recitation 3 – Control Structures.

Nested if statements

if (num1 < 0) {if (num2 < 0) {

if (num3 < 0)negativeCount = 3; //all three are negative

else negativeCount = 2; //num1 and num2 are negative}else {

if (num3 < 0) negativeCount = 2; // num1 and num3 are negative

else negativeCount = 1; // num1 is negative}

}else {

if (num2 < 0) {if (num3 < 0)

negativeCount = 2; // num2 and num3 are negativeelse negativeCount = 1; // num2 is negative

}else {

if (num3 < 0) negativeCount = 1; // num3 is negativeelse negativeCount = 0; // no negative numbers

}}

Input 3 integers and determine how many of them are negative

Page 11: CS1101: Programming Methodology Recitation 3 – Control Structures.

Nested if statements

More elegant version!

negativeCount = 0;

if (num1 < 0) negativeCount ++;

if (num2 < 0) negativeCount ++;

if (num3 < 0) negativeCount ++;

Input 3 integers and determine how many of them are negative

Page 12: CS1101: Programming Methodology Recitation 3 – Control Structures.

Rules for if statements

1. Minimize number of nestings

2. Avoid complex boolean expressions. - Make them as simple as possible. - Don’t include many ANDs and ORs.

3. Eliminate unnecessary comparisons.

4. Don’t be satisfied with first correct statement. Always look for improvement

5. Read your code again. Can you follow the statement easily ? If not, try to improve it.

Page 13: CS1101: Programming Methodology Recitation 3 – Control Structures.

13

Dataset Analysis

Objective: Develop a program that finds the min, max, and mean of a dataset of values.

Analysis and Design:

Methods: 1. public double getMinimum()2. public double getMaximum()3. public double getAverage()

These methods return double.NaN if dataset is empty

Page 14: CS1101: Programming Methodology Recitation 3 – Control Structures.

14

Dataset Analysis

Analysis and Design:

Constructors:1. public DataSet () – initialize representation of an

empty dataset2. Public DataSet (String s) – initialize dataset with values

from file with name s3. member methods – getSize(), addValue (double x),

clear(), load (String s)Instance variables:

• private int n• private double minimumValue• private double maximumValue• private double xSum

Page 15: CS1101: Programming Methodology Recitation 3 – Control Structures.

import java.io.*;

public class DataSetTester {public static void main(String[] args) throws IOException {

DataSet dataset = new DataSet("age.txt");System.out.println();System.out.println("Minimum: " + dataset.getMinimum());System.out.println("Maximum: " + dataset.getMaximum());System.out.println("Mean: " + dataset.getAverage());System.out.println("Size: " + dataset.getSize());System.out.println();dataset.clear();dataset.load("stature.txt");System.out.println("Minimum: " + dataset.getMinimum());System.out.println("Maximum: " + dataset.getMaximum());System.out.println("Mean: " + dataset.getAverage());System.out.println("Size: " + dataset.getSize());System.out.println();}

}

Page 16: CS1101: Programming Methodology Recitation 3 – Control Structures.

// Data set summary representation import java.io.*;

public class DataSet {// instance variables private int n;private double xSum;private double minimumValue;private double maximumValue;

// DataSet(): default constructor public DataSet() {

clear();}

// DataSet(): specific constructor public DataSet(String s) throws IOException {

load(s);}

Page 17: CS1101: Programming Methodology Recitation 3 – Control Structures.

// clear(): empties the data set public void clear() {

n = 0; xSum = 0;minimumValue = Double.NaN;maximumValue = Double.NaN;

}// add(): adds the value to the set public void addValue(double x) {

xSum += x;++n;if (n == 1) {

minimumValue = maximumValue = x; }else if (x < minimumValue) {

minimumValue = x;}else if (x > maximumValue) {

maximumValue = x;}

}

Page 18: CS1101: Programming Methodology Recitation 3 – Control Structures.

// load(): adds the values from the file to set public void load(String s) throws IOException {

// get a reader for the file BufferedReader fileIn = new BufferedReader(

new FileReader(s));

// add values one by one String currentLine = fileIn.readLine();while (currentLine != null) {

double x = Double.parseDouble(currentLine);addValue(x);currentLine = fileIn.readLine();

}

// close up filefileIn.close();

}

Page 19: CS1101: Programming Methodology Recitation 3 – Control Structures.

// getAverage(): compute data set average public double getAverage() {if (n == 0) return Double.NaN;else return xSum / n;}

// getMinimum(): produce minimum data set value public double getMinimum() {return minimumValue;}

// maximum(): produce maximum data set value public double getMaximum() {return maximumValue;}

// getSize(): produce data set size public int getSize() {return n;}

}