.. _exam-2-review: Exam 2 Review ============= Here are a few sample questions that are similar to those you might see on the next exam! Then we will present a sample programming problem. Part 1 - Review of the tools we have learned -------------------------------------------- Think about all the tools you have at your disposal now to develop a computer program to solve some problem. You have studied a number of basic concepts you need to understand before you can apply them to solve problems with a computer. The questions that follow are typical of the kinds of problems you might encounter (on the exam, or in real life) where a computer would make a good tool to use in solving them. Encoding Data ,,,,,,,,,,,,, * QUESTION: Suppose you discovered that sound is just air particles vibrating at a certain rate (frequency). You also discovered a device that can measure the vibrations and produce an electrical voltage between 0 and 5 volts - corresponding to the full range of sounds you can hear. 0 volts means no sound, and 5 volts means a very high pitched sound - so high you can barely make it out! If we want to teach the computer to store and analyze sound, how would we encode that data? We want to come up with an encoding that will give us good accuracy in recording the frequency. Standard Data Types ,,,,,,,,,,,,,,,,,,, * QUESTION: What does the term `Data Type` mean. (That is, what does the computer know about a `data type`?) * QUESTION: What are the fundamental data types we have learned so far, and give an example of a `literal` value for each type. Declaring and Initializing Variables ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, * QUESTION: Show a declaration of a variable suitable for storing your age in years. * QUESTION: Show a declaration suitable for storing your precise height in inches. * QUESTION: How do we initialize the variables we defined above? Fundamental programming structures ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, * QUESTION: Draw diagrams for the three fundamental programming structures. Input/Output Statements ,,,,,,,,,,,,,,,,,,,,,,, * QUESTION: Show a sample input statement that loads the variable you created to store your height. * QUESTION: Show an output statement that displays your age with a label. Assignment Statements ,,,,,,,,,,,,,,,,,,,,, * QUESTION: An assignment statement is written like this: `A = expression;`. Explain what the computer will do when it processes this statement. Expressions ,,,,,,,,,,, * QUESTION: What is an expression? Give examples of places where you will need to write expressions in your programs. * QUESTION: How are parentheses used in expressions? How does the computer process an expression containing parentheses? Math Operators and Precedence ,,,,,,,,,,,,,,,,,,,,,,,,,,,,, * QUESTION: List the four fundamental math operators. * QUESTION: in an expression using all of the operators above and no parentheses, how will the computer process the expression? Logical Operators ,,,,,,,,,,,,,,,,, * QUESTION: What is the difference between an expression that performs math, and a logical expression? * QUESTION: Show an expression that determines if the number `num` is between `big` and `little`. Decision Statements ,,,,,,,,,,,,,,,,,,, If-Then-Else Statements ....................... * QUESTION: Show an `if-then-else` statement that displays the text "Hello World" if the value of the variable `mood` is greater than 5, and displays the text "go away" otherwise. While-Loop .......... * QUESTION: Show how to write a `while-loop` that displays the even numbers from 0 to 10. Do-While-Loop ............. * QUESTION: Show how to write a `do-while-loop` that displays the even numbers from 0 to 10. For-Loop ........ * QUESTION: Show how to write a `for-loop` that displays the even numbers from 0 to 10. Part 2 - Solving a Sample Problem ---------------------------------- We need to demonstrate that we are learning how to solve realistic problems. In this exercise, remember to take small steps as you work out a solution. You can take these steps and write code at the same time. You should practice this in all of your programming projects! .. note:: This exercise will demonstrate something useful, but it will not be part of the exam. I want to show you how to "feed" a simple program with data we place in a file. The program will not know it is reading data from a file, it will run exactly as if a human is typing things in. This is kind of neat! Let's start off by building a simple "Hello, World" program manually. Name this project ``test2`` and save it in a folder named ``Exam2Lab``.. .. literalinclude:: code/test0.cpp :language: c++ Place this code in ``main.cpp`` in your project folder. Now run the program and make sure it works correctly. The problem ,,,,,,,,,,,, Here is a basic statement of the problem we are asked to solve: Suppose we have collected data from exactly 12 sample temperatures produced by a recording thermometer on a mountain top (yes, there are such things!). The data is recorded in a simple text file with one integer number per line. We would like to produce an output listing of the recorded temperature and the difference between each reading and the average for the entire data set. Sounds hard, but we will work through it slowly and see if we can come up with a solution. Since we cannot figure out the average value of the data unless we process all the data, we seem to need to process the data twice. On the first pass, we calculate the average temperature, and on the second pass we produce the output. We can make this happen if we create a new data file with the recorded data listed twice. We will do this with a simple text editor. Now, you know how to use ``cin`` to read data that the user types in on the keyboard. There is an interesting way to cause a program that reads input using ``cin`` to read data from a file instead. It uses something called ``redirection`` on the command line to do the job. If our program ended up in a file called ``test2.exe`` in our project folder, we could open a ``command prompt`` window and type the following command to run the program: .. note:: You can open a `command prompt` window by clicking on the ``Start`` button at the bottom left of your screen on a PC. Type ``cmd`` into the search box that appears near this icon, or navigate to :menuselection:`All programs --> Accessories --> Command Prompt`. You can type ``help`` at the command prompt to see the commands that are available. Most of them are short, and you can type ``help command`` to show you details on how to use each basic command. We only need to worry about `cd` (case does not matter in these commands) and `dir`. .. code-block:: text C:\COSC1315\Exam2Lab> test2 And you should see your output. .. note:: We run programs at the ``command prompt`` by typing the name of the program file (you can add the `.exe` extension, or leave it off) and the system will load the program and run it. The difference here is that you are issuing commands by typing them in, not clicking on a file name or a button in the IDE. If you have trouble doing this, ask me for help, or check with a tutor in an open lab on campus. Getting started ............... Here is the project code I will test: .. literalinclude:: code/test1.c :language: c Now, this program does not print anything out when it starts, it will wait until you type a number in, then display the result. Try it manually, first. .. code-block:: bash c:\COSC1315\Exam2Lab>test2 12 You entered 12 This is basically what you would see if you ran the program from inside CLion. Now, let's try the redirection trick. This assumes you have a file with one number in it. Create a data file by starting ``gVim`` (or ``notepad``), and entering a single line with ``12`` on it. Be sure to press the enter key at the end of this line. Save the file as ``mydata.txt``. Now, go back the your command prompt window and try this: .. code-block:: bash c:\COSC1315\Exam2Lab>dir Volume in drive C has no label. Volume Serial Number is 5440-3100 Directory of c:\COSC1315\Exam2Lab 10/27/2018 11:45 PM . 10/27/2018 11:45 PM .. 10/27/2018 11:45 PM 355 main.cpp 10/27/2018 11:03 PM 475,166 test2.exe 10/27/2018 11:10 PM 8 mydata.txt 5 File(s) 950,516 bytes 2 Dir(s) 356,464,300,032 bytes free .. note:: MAC users should type ``ls -l`` to see something similar. The actual output will be different from this, but similar. Here, we see the program file, and the data file. We will run the program manually now: .. code-block:: bash c:\COSC1315\Exam2Lab>test2 < mydata.txt You entered 12 We do not see the number being entered because the user did not type the keys directly, but the program read the data just as though the user had entered it. This is enough to get you through the lab part. The "less than" symbol tells the operating system to *redirect* normal input to the program from the file instead of the keyboard. This is a handy way to set up a test for your program where the same data will be used every time you run the program. The output will appear on the console as usual. If you want to capture the output in a second file, say ``myresults.txt``, you could do the following: .. code-block:: bash c:\COSC1315\Exam2Lab>test2 < mydata.txt > myresults.txt You can see what is in the file by opening it with something like `Notepad`, or by typing this: .. code-block:: bash c:\COSC1315\Exam2Lab>type myresults.txt You entered 12 OK, now on to the problem: * We are to write a program that reads in the first 12 numbers and calculates the average temperature seen during the recording period. * The program then reads the next 12 numbers and prints out 12 lines with the following information: * The recorded temperature, and the difference between this temperature and the average temperature. This will not be hard if you work on it using the `Baby Steps` approach. You should try to solve this problem for practice before the test, at least before the lab part of the test! Here are the steps I took to get the final code running: * build the sample data file with 12 random numbers. Then copy the 12 numbers and paste them after the first set to get 24 lines of sample data in ``mydata.txt``. * Add code to read 12 numbers from the input. I printed out the data to make sure it worked. Here is what I got after this step: .. code-block:: text c:\COSC1315\Exam2Lab>test2 < mydata.txt line 0 contained 12 line 1 contained 14 line 2 contained 16 line 3 contained 18 line 4 contained 20 line 5 contained 22 line 6 contained 24 line 7 contained 10 line 8 contained 9 line 9 contained 17 line 10 contained 2 line 11 contained 5 * I duplicated the above code and added it again to make sure I could read all 24 values from the file. (You should see two sets of the above output.) * Add code to calculate the ``average`` value from the first set of numbers. Print out this result after you complete the first loop. All we need to do to calculate an average is to sum up all the numbers we see and divide by the number of data items. We will use integer math and produce an integer value. Here is what I produced: .. code-block:: bash Average value was 14 * The last step added code to the second loop to do the required calculations to produce the final output. Here is the final output: .. code-block:: bash Average value was 14 0: 12 (diff from avg is -2) 1: 14 (diff from avg is 0) 2: 16 (diff from avg is 2) 3: 18 (diff from avg is 4) 4: 20 (diff from avg is 6) 5: 22 (diff from avg is 8) 6: 24 (diff from avg is 10) 7: 10 (diff from avg is -4) 8: 9 (diff from avg is -5) 9: 17 (diff from avg is 3) 10: 2 (diff from avg is -12) 11: 5 (diff from avg is -9) OK, so the output is a bit ugly, but we will learn how to fix that later. For now, this is fine. Can you build this program. Try it! One final note: ---------------- When you take my test, and you see a question that wants you to write something, I am not looking for an extremely short answer. I am interested in you telling me enough to show that you know what is going on, and are learning the concepts well enough to be able to use them in real problem solving. On the other hand, I do not subscribe to the old student tactic: Write down everything you know, because surely the answer must be is there somewhere. (I once had a professor who gave you a fixed amount of space to answer a question and stopped reading when the space was filled up!) Since you have as much time to work the test as you need, spend more time thinking about the answer than you do writing it down. You should do much better this time - assuming you are studying, of course. Good luck!