1 / 30

CSE 20232 Lecture 4 – Algorithms & Decisions

CSE 20232 Lecture 4 – Algorithms & Decisions. Algorithms Basic Control Structures Comparisons and if (…) statement What is a function ? Math Library Functions Character Functions Reading Sample Programs. Algorithms. What is an algorithm ?

marli
Download Presentation

CSE 20232 Lecture 4 – Algorithms & Decisions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSE 20232Lecture 4 – Algorithms & Decisions • Algorithms • Basic Control Structures • Comparisons and if (…) statement • What is a function? • Math Library Functions • Character Functions • Reading • Sample Programs

  2. Algorithms • What is an algorithm? • A precise description of the sequence of steps necessary to solve some task • Your programs begin as algorithms • Sample: finding absolute value • 1 – prompt user and get users input value • 2 – if value is negative then negate it • 3 – output result

  3. Converting Algorithms to Code • Place algorithm in program shell as comments #include <iostream> using namespace std; int main () { // 1 - prompt user and get user’s input // 2 - if input value is negative then negate it // 3 - output result return 0; }

  4. Converting Algorithms to Code • Then fill in C++ code for each algorithm step #include <iostream> using namespace std; int main () { int value; // 1 - prompt user and get user’s input cout << “Enter an integer value: “; cin >> value; // 2 - if input value is negative then negate it if (value < 0) value = -value; // 3 - output result cout << “Its absolute value is : “ << value << endl; return 0; }

  5. Basic Control of Execution • There are three primary methods of controlling the flow of program execution • Sequence – this is the default • Selection – here a choice is made to • Perform a step or not • Perform one step or another • Repetition – also known as Iteration • Repeat a step over and over • Recursion also allows us to repeat steps, but we will wait to discuss this until later

  6. Control structure example • Program that repeatedly calculates absolute values #include <iostream> using namespace std; int main () { int value; cout << “Enter an integer value (or q to quit): “; cin >> value; while (! cin.fail()) // <-- repetition { if (value < 0) // <-- selection value = -value; cout << “Its absolute value is : “ << value << endl; cout << “Enter an integer value (or q to quit): “; cin >> value; } return 0; }

  7. Comparisons • Operators • (x < y) less than • (x <= y) less than or equal • (x > y) greater than • (x >= y) greater than or equal • (x == y) equal • (x != y) not equal

  8. Logical (boolean) expressions • Operators • (x && y) x and y • (x || y) x or y –- (inclusive or) • (! x) not x • Precedence (highest to lowest) • ! • < <= > >= == != • && • ||

  9. Comparisons & Logic • Comparisons and logical (boolean) expressions all evaluate to true or false • In C, zero (0) takes place of false and any non-zero value can represent true • Examples:x=2x=12 • (x < 5) true false • (1 <= x) && (x <= 10) true false • (x < 1) || (10 < x) false true • !(x == 5) == (x != 5) true true

  10. Boolean Operation Truth Tables x y x && y x || y ! x ------- ------- ------- ------- ------- false false false false true false true false true true true false false true false true true true true false

  11. If ( … ) statement • if ( … ) allows two methods of choosing what code to execute or not • This form either executes the <statement> or not, depending on the truth of the <expression> if ( <expression> ) <statement> • This form executes <statement 1> if <expression> is true, otherwise it executes <statement 2> if ( <expression> ) <statement 1> else <statement 2>

  12. If ( … ) statement examples cin >> value; if (value < 0) value = -value; // skipped if value not negative if ((x < 1) || (10 < x)) cout << “x is out of range\n”; else cin << “x is in range\n”;

  13. Code Blocks • A block of code is any sequence of statements between open and closed braces { } • A block can take the place of any single statement in C or C++ • A block may also have declarations of variables (objects) that exist only within the block • This is called local scope • Locally declared objects cease to exist when execution leaves the block

  14. Code Block Example cout << “Enter a non-negative value: “; cin >> value; if (value < 0) { // give user a chance to correct the input cout << “That value is negative\n” << “Please enter a non-negative value: “; cin >> value; }

  15. Nesting • Since if ( … ) is a statement itself, it can be nested inside other if statements if (a < 0) cout << “is negative”; else if (a > 0) cout << “is positive”; else cout << “is zero”;

  16. Nesting Warning • The else is always paired with the closest preceding unpaired if • The following does not perform as the indentation would lead you to believe • When A is -15 output is is negative is very negative • When A is -8 output is is negative is non-negative • When A is 10 output is is non-negative if (A < 0) cout << “ is negative”; if (A < -10) cout << “ very negative”; else cout << “ is non-negative”;

  17. Nesting Warning • The code below “fixes” the confusion, associates the else with the first if, and outputs appropriate descriptions of A • When A is -15 output is is negative is very negative • When A is -8 output is is negative • When A is 10 output is is non-negative if (A < 0) { cout << “ is negative”; if (A < -10) cout << “ very negative”; } else cout << “ is non-negative”;

  18. What is a function? • A function is a named, parameterized block of code that computes a value or performs a task • We invoke a function by using its name with appropriate parameters as a statement in our code, or as part of an expression • Example: • double sqrt(double v); // prototype • The square root function from the math library • It computes the square root of the value of the parameter v and returns the result to the calling context • y = sqrt(x+37.5); // invocation

  19. Math Library Functions#include <cmath> • abs(x) – absolute value of x • sqrt(x) – square root of x • pow(x,y) – xy • ceil(x) – smallest integer larger than x • floor(y) – largest integer smaller than x • exp(x) - ex • log(x) – natural log of x – ln(x) • log10(x) – log10(x) • sin(x) – sine of x, range +/- 1.0, x in radians • cos(x) – cosine of x, range +/- 1.0, x in radians • tan(x) – tangent of x, x in radians • asin(x) – arcsine of x, range +/- PI/2 • acos(x) – arccosine of x, range 0 to PI • atan(x) – arctangent of x, range +/- PI/2 • atan2(x,y) – arctangent of x,y, range +/ PI

  20. Character Functions#include <cctype> • toupper(ch) – returns upper case equiv. of ch • tolower(ch) – returns lower case equiv. of ch • isalpha(ch) – true if ch is a letter a..z, A..Z • isdigit(ch) – true if ch is a digit 0..9 • There are more …

  21. Reading (revised) • Continue reading in Deitel … • Week 2 • Sections 2.5-2.7, 6.1-6.6 (also Ch4 sections below) • Appendices B, C, E.1-E.2 • Week 3 • Sections 4.1-4.12, 15.1-15.8 • Appendices F.1-F.3

  22. Trajectories General Position Calculations x = x0 + vx0 * t y = y0 + vy0 * t + 0.5 * g * t2 vy = vy0 + g * t Height = vy0 * tmid + 0.5 * g * tmid2 vy(tmid) = 0 = vy0 + g * tmid So, tmid = -vy0 / g v0 vy0 g = -32.0 ft/sec2 vx0 tof = 2 * tmid Range = vx0 * tof

  23. Calculating Range of a Projectile • This is a parabolic trajectory under the influence of Earth gravity, but no air • Algorithm • 1 – prompt user and read launch angle in degrees • 2 – prompt user and read initial velocity in ft/sec • 3 – calculate vx & vy (initial velocity components) • 4 – calculate time of flight (no air, gravity -32 ft/s/s) • 5 – calculate range • 6 – output results

  24. Calculating Range of a Projectile // range.cpp – JHS – 8/29/06 – CSE Notre Dame #include <iostream> #include <iomanip> #include <cmath> using namespace std; int main () { const double g = -32.0; const double rads_per_degree = 2 * 3.14159 / 360.0; double thetaD, thetaR, v0, vx0, vy0, t, time_of_flight; // 1 – prompt user and read launch angle in degrees cout << “ Enter angle of barrel above horizon (in degrees): “; cin >> thetaD; thetaR = thetaD * rads_per_degree; // convert to radians // 2 – prompt user and read initial velocity in ft/sec cout << “ Enter initial velocity of projectile (in ft/sec): “; cin >> v0;

  25. Calculating Range of a Projectile // 3 – calculate vx & vy (initial velocity components) vx0 = v0 * cos(thetaR); vy0 = v0 * sin(thetaR); // 4 – calculate time of flight (no air, gravity -32 ft/s/s) t = -vy0 / g; time_of_flight = 2.0 * t; // 5 – calculate range, etc, and output results cout << fixed << setprecision(2); cout << “Projectile firing: Initial conditions\n”; cout << setw(10) << thetaD << “ degrees above horizon\n”; cout << setw(10) << v0 << “ ft/sec muzzle velocity\n”; cout << “Trajectory characteristics:\n”; cout << setw(10) << time_of_flight << “ seconds in flight\n”; cout << setw(10) << (vx0*time_of_flight) << “ feet down range\n”; cout << setw(10) << (vy0*t + 0.5*g*t*t) << “ feet max height\n”; return 0; }

  26. Quadratic Polynomial Roots • Find solutions (roots) to 0 = ax2 + bx + c • There are several different cases • 1: a == 0, b != 0, there is one real root x = -c/b • 2: a == 0, b == 0, c != 0, nonsense equation with no roots • 3: a == 0, b == 0, c == 0, every value of x is a root • 4: a != 0, x = (-b +/- sqrt(b2 - 4ac))/2a, potentially two roots • (A) (b2 - 4ac) < 0, roots are complex not real • (B) (b2 - 4ac) == 0, there is one real root x = -b/2a • (C) (b2 - 4ac) > 0, there are two real roots • x1 = (-b + sqrt(b2 - 4ac))/2a • x2 = (-b - sqrt(b2 - 4ac))/2a

  27. Quadratic Polynomial Roots • Algorithm: • 1 - prompt user and read three coeficients (a,b,c) • 2 - determine which case above (1,2,3,4) • 3 - in cases 1, 2, & 3 computer root and output result or output appropriate message • 4 - in case 4, calculate the value of b2 - 4ac and determine which case applies (A,B,C) • 5 - in case A output message • 6 - in cases B & C calculate root(s) and output results

  28. Quadratic Polynomial Roots // roots.cpp – JHS - 2003 #include <iostream> #include <cmath> using namespace std; int main( ) { double a,b,c; // coefficients of quadratic equation double rad; // will be the value under the square root double root1,root2; cout << "Enter the values of a, b, and c for" << " the quadratic equation\n"; cout << " (ax^2 + bx + c) = 0\n"; cout << "> "; cin >> a >> b >> c; cout << "\nFor the equation (" << a << "x^2 + " << b << "x + " << c << " = 0)\n";

  29. Quadratic Polynomial Roots if (a == 0.0) { if (b == 0.0) if (c == 0.0) cout << "Any value is a root of this equation\n"; else cout << "There is no root of this equation\n"; else { root1 = -c / b; cout << “One real root (x = " << root1 << ")\n"; } } else { rad = b * b - 4 * a * c;

  30. Quadratic Polynomial Roots if (rad < 0.0) cout << " There are only complex roots\n"; else if (rad == 0.0) { root1 = -b / (2 * a); cout << “One real root (x = " << root1 << ")\n"; } else { root1 = (-b - sqrt(rad)) / (2 * a); root2 = (-b + sqrt(rad)) / (2 * a); cout << “Two real roots (x = " << root1 << " and x = " << root2 << ")\n"; } } return 0; }

More Related