.. _cosc1336-exam2-lab: Exam 2 Lab Problem ################## .. include:: /references.inc This lab project involves several steps. Work through them in order. In the files you create, it would help both of us if you add comments indicating where you are in this sequence of steps. Before you begin work on this project, set up a directory named "ExamLab2" in the ``homework`` repo on your system and do all your work in that directory. .. note:: As you work through this program, it will help if you add output statements showing what is going on. Build the program in steps, checking your work as you go. All of the functions you create can show what they did with a simple print statement. When you get ready to turn the code in, comment out the extra print statements (do not remove them) so I can see how you tested your code. I will give extra credit for good testing. Step 1: The main program file ***************************** You need to set up a simple program file named "Exam2.py" with a function named "main" that prints out this set of lines: .. code-block:: text Exam 2 Lab problem Submitted by: Firstname Lastname On November 18, 2018 Obviously, you should change some of this output. If you submit a program that prints out exactly what is shown above, I will give the credit to someone named "Firstname Lastname"! Your file should have a call to the ``main`` function you created. That call should be in the final ``if`` block commonly used in in python code files. Test your file to make sure it generates the required output.` Step 2 - Setting up a module **************************** Next, set up a second file named ``mymath.py``. In that file do the following: 1. Add the line that makes all of the functions in the Python standard ``math`` module avaliable. 2. Write a function named "powerval" in your module file that takes two integer parameters. You can name these parameters anything you like. 3. Your function should examine the two parameters to see which is the smaller of the two, storing that value in a variable named ``small`` and storing the larger of the two in a variabel named ``big``. 4. The function then calls the ``pow`` function from the Python "math" library to evaluate the value of ``big`` raised to the ``small`` power. Your function should return that value to the caller. Make sure this number is an integer (you will need to force it to be an integer using a standard Python technique). Step 3 - Reading data from a file ********************************* Create a text file named "sample.dat" with the following data items, one per line: * 1 2 4 7 2 4 9 3 8 2 3 8 10 2 -1 Now do the following: 1. In your main program file, add a function named "getData" that opens the "sample.dat" file for reading. 2. Set up a variable named ``done`` and initialize that variable to ``False`` 3. Set up a ``while`` loop that uses the variable ``done`` as the looping condition. It will look like this: .. code-block:: python done = False while not done: # your code goes here Does this make sense? We will be stuck in this loop until we decide we are done. Then we will set the variable ``done`` to ``True`` and it will stop! 4. Inside the loop body, read in a number from the file. If that number is negative, set the variable ``done`` to ``True`` and exit the loop. If that number is not negative, read in another number. Then call the ``powerval`` function (in your module file) passing the two numbers you have read as parameters. When you get your value back from the ``powerval`` function, print that number on the console followed by an end of line marker ("\n"). No other output is required. 5. Add a call to your ``getData`` function inside your ``main`` function, after the output lines from step 1. Test this version of your program and make sure it displays the right values for each pair of numbers from your data file. You should see 7 numbers. Step 4: Summing up numbers ************************** In this segment, we will modify the ``getData`` function so it writes out the numbers we previously saw on the console into an output file instead. 1. In your ``getData`` function, open up an output file named "output.dat". Change the output code you have there now so it writes the number to the output file, one number per line. 2. Add code to close the output file when the processing is compete 3. Run your program and check that you see the same seven numbers in the file, and that they are on a single line each. 4. Set up a new function in your main program file named ``summer`` that takes no parameters. 5. Open your "output.dat" data file as an input file. 6. Set up a loop that reads all the numbers from the input file and adds them up. When you get done, return that final total to the caller of the ``summer`` function. Step 5 - Completing the main routine ************************************ Your main program code should have a call to the "getData" function. Add a call to the ``summer`` function right after this call, and save the return value in a variable. Finally, print out the final sum on a line that looks like this: .. code-block:: python The final sum was xxx .. note:: Hint: The answer I got was 3824 Congratulations, you are done. You will need to push your repo to GitHub_. Make sure you have these two Python source files: * Exam2.py * mymath.py