/*======== Fall 2024 - CS 111 Week 10 Lab Exercise date: 2024-11-01 ========*/ /*--- USING pair-programming * COPY and PASTE the contents of this file into a lab10.cpp file within the CS50 IDE * ADD the parts asked for below (one student saying what to type, the other student typing it into the CS50 IDE) * each time you want to compile: in a CS50 terminal that is open to the folder CONTAINING this .cpp file, ("Open in Integrated Terminal"), type: g++ lab10.cpp -o lab10 * IF it compiles with no errors: to run: in that same CS50 terminal that is open to the folder CONTAINING this .cpp file, type: ./lab10 * When you are satisfied with its output, create an example output file by typing: ./lab10 > lab10-out.txt * Download copies of your resulting lab10.cpp and lab10-out.cpp by right-clicking on their names in the file explorer on the left of the CS50 IDE, and use Gmail to MAIL a copy of these files to BOTH of you. * And, EACH of you should SUBMIT these TWO files lab10.cpp and lab10-out.txt to Canvas ---*/ /*--- by: PUT BOTH of YOUR NAMES HERE last modified: 2024-11-01 ---*/ #include <cstdlib> #include <iostream> #include <string> #include <cmath> using namespace std; /*--- INFO YOU NEED TO KNOW for PROBLEM 1! --- FUN FACT: the C++ string class also includes a substring method named substr -- if given a starting position and a length, it returns the string starting at that position and going that many characters (or until the end of the string, whatever comes first). So, for example, if you had a string parameter thingy, and you wanted the string that was the first 3 characters in thingy, you could use the expression: thingy.substr(0, 3) // start at position 0, grab 3 characters, // return the string of those 3 characters * so -- what is the difference between thingy.at(0) // grab the char at position 0 and thingy.substr(0, 1) // grab the string of length 1 starting // at pos 0 at returns a char, but substr returns a string! THAT IS, if thingy is, say, "moo", thingy.at(0) == 'm' thingy.substr(0, 1) == "m" ---*/ /*--- WEEK 10 LAB EXERCISE - PROBLEM 1 ---*/ /*--- Use the design recipe to design and write a C++ function short_name that expects a first name and a last name, and returns a shorter version of that full name made up of the first initial (the first letter of the first name), a period, a blank, and the last name. For example, short_name("Charlie", "Brown") would return "C. Brown". * (IF you want: in the main function, you can also include one or more cout statements that JUST include an example call of short_name AFTER its tests, so you can SEE the value those call(s) return) ---*/ /*--- signature: purpose: tests: ---*/ /*--- WEEK 10 LAB EXERCISE - PROBLEM 2 ---*/ /*--- The purpose of this problem is to make sure that you are familiar with the class indentation style for the chained if-else-if "pattern". LOOK over Week 10 Lecture 2's posted NOTES, which compared the Racket cond expression to its rough-C++ if-else-if-pattern equivalent: if (bool_expr1) { return result_expr1; } else if (bool_expr2) { return result_expr2; } ... else { return result_else; } The above does follow the class style standards. BUT, the following function header and body for function try_it BELOW, while syntactically correct, does NOT follow class coding standards! So -- MODIFY the function below to FOLLOW the class style! (try_it is called in the main function below, so you can make sure it still works after you fix its style) NOTE!! The instructor will HAPPILY check over your answer IN LAB before you submit this and let you know if your version meets class style!!! <-- just ask! ---*/ /*--- IMPROVE the FORMATTING of this WORKING function to MEET CS 111 CLASS CODING STANDARDS ---*/ double try_it(double val1, double val2) { if (val1 < val2){ return val2 - val1;} else if (val2 < val1){ return val1 - val2; }else {return val1 + val2;}} /*--- WEEK 10 LAB EXERCISE - PROBLEM 3 ---*/ /*--- In the Week 4 Lab Exercise, you designed a Racket function size->quant that expected the *name* of one of these drink sizes: size name: "short" "tall" "grande" "venti" "trenta" # ounces: 8 12 16 20 31 ...and returned just the *number* of ounces you get for that drink size. (that is, for example, you call it with "short", it returns just 8) And it returned a drink size of 0 if the drink name given was NOT equal to one of these. Use the design recipe to design a C++ version of this function named size_to_quant. * for full credit, appropriately use a chained if-else-if "pattern" in this function * be careful -- at least how many tests are needed for this function? * (IF you want: in the main function, you can also include one or more cout statements that JUST include an example call of size_to_quant AFTER its tests, so you can SEE the value those call(s) return) ---*/ /*--- signature: purpose: tests: ---*/ /*--- WEEK 10 LAB EXERCISE - PROBLEM 4 ---*/ /*--- In the Week 4 Lab Exercise, you designed a Racket function judge-carbs that expected the number of carbohydrates some food has in a serving, and, based on the following: * Someone has decided that they want to judge a food as low-carbohydrate if if has less than or equal to 10 grams of carbohydrates per serving. * And, if > 10 grams and <= 20 grams, they want to judge it as moderate-carbohydrate, * and if > 20 grams, they want to judge it as high-carbohydrate. ...it returned whether, for this person, they would judge that number of carbohydrates as "lo-carb", "mod-carb", or "hi-carb". Use the design recipe to design a C++ version of this function named judge_carbs. * for full credit, appropriately use a chained if-else-if "pattern" in this function * be careful -- at least how many tests are needed for this function? * (IF you want: in the main function, you can also include one or more cout statements that JUST include an example call of judge_carbs AFTER its tests, so you can SEE the value those call(s) return) ---*/ /*--- signature: purpose: tests: ---*/ /*--- test the functions above ---*/ int main() { cout << boolalpha; cout << "*** Testing short_name ***" << endl; // copy each of short_name's test expressions into a // cout statement to print its result // (then REMOVE the // comment parts so you can RUN that cout!) // cout << () << endl; // cout << () << endl; cout << "*** Making sure Problem 2's function try_it runs ***" << endl; cout << "try_it: " << try_it(3.5, 1.2) << endl; cout << "*** Testing size_to_quant ***" << endl; // copy each of size_to_quant's test expressions into a // cout statement to print its result // (then REMOVE the // comment parts so you can RUN that cout!) // cout << () << endl; // cout << () << endl; // cout << () << endl; // cout << () << endl; // cout << () << endl; // cout << () << endl; cout << "*** Testing judge_carbs ***" << endl; // copy each of judge_carbs' test expressions into a // cout statement to print its result // (then REMOVE the // comment parts so you can RUN that cout!) // cout << () << endl; // cout << () << endl; // cout << () << endl; // cout << () << endl; // cout << () << endl; return EXIT_SUCCESS; }