• Mini-Projects

    For the remainder of the labs in this semester, you will be working on mini-project(s). You are free to choose the mini-project that most interests. You can use any library or functions you can find online. The focus of these mini-projets is on developing algorithms to solve a problem, and not on solving the C language shortcomings. If you do use any library or functions that we have not discussed in class, please let me know what you are using. I will determine if those can be allowed in the final exam or not. On the final exam, you will be asked to write a program that is similar in complexity to the mini-projects. For the final exam, assume you will only be allowed to use functions that we have discussed in class.

    Mini-Project Grading Policy:

    Your grade for the remainder of the labs will be based on the score for your mini-project(s). You are only required to do one mini-project. However, you can do more than one to better your chances of getting a higher grade (and also get more practice for the final exam). Or more importantly get more experience in solving problems with programming. Or better yet, because you love programming. :-)

    The highest score out of your mini-projects will be used.

    Mini-Project Grading Workflow:

    I want to give the students the most opportunity to work on what they enjoy and at their own pace, however, I do not want the lab instructors to be overworked with grading. So hopefully, the below process will be a happy medium:

    • After the student finishes the first mini-project, s/he coordinates with the lab instructor to submit the first mini-project for grading
    • The student can then decide to work on the second mini-project or wait for the grading results from the lab instructor. It is the student's responsibility to coordinate with the lab instructor when the score will be returned so the student will have time to work on another mini-project or resubmit the first mini-project.
    • If the student chooses to do a second mini-project:
      when the student finishes the second mini-project, s/he must coordinate with the lab instructor to submit the second project for grading. The student can then decide to work on the third mini-project or wait for the grading results from the lab instructor. It is the student's responsibility to coordinate with the lab instructor when the score will be returned so the student will have time to work on another mini-project or resubmit the second mini-project.
    • If the student chooses to wait for the grade from the first mini-project:
      when s/he receives the grade for the first mini-project, s/he can accept the grade and be done. Or the student can fix his/her first mini-project and resubmit the first mini-project. Or the student can move on to the second mini-project. The student can resubmit the first mini-project at most two times (i.e. the first project will be graded at most three times). This resubmission process applies to all 3 mini-projects.

    Mini-Project Grading Extras:

    These are the situations I am trying to avoid:

    • Students giving the lab instructors 2 or 3 projects (including resubmitted projects) to grade on the very last lab section. If this happens, the lab instructor is allowed to grade just one (whichever one s/he chooses) and give the student the grade for that project. If the student has a higher grade from a previously graded mini-project, then the lab instructor will use the highest of the grades received by the student as the grade for the remainder of the labs
    • Students continually submitting their projects and having the lab instructors figure things out and solve things for the student. The lab instructors are only required to provide comments for at most 2 gradings. On the 3rd and final grading, the lab instructors are not required to provide feedback and can just assign a grade
    • If a student already has a 100% on one of the mini-projects, the lab instructor are not required to grade any more mini-projects or resubmissions for that particular student. This is to allow the lab instructor time to grade other students' mini-projects. If the lab instructor has time, then s/he can choose to provide feedback. Grading other students' mini-projects will be higher in priority. The student with a 100% grade on a previous mini-project is free to verify themselves whether or not their program fulfills the mini-project requirements

    Mini-Project Grading Summary:

    • you are only required to complete 1 mini-project, but are encouraged to do more for yourself and to better prepare for the final exam
    • you need to coordinate with the lab instructor on when grades are returned so you have sufficient time to resubmit or do another mini-project
    • you can resubmit a mini-project for grading at most 2 times, i.e. each mini-project can be graded at most 3 times
    • do not turn in all of your mini-projects and resubmissions at once on the very last lab section
    • finishing early will better your chances of getting your mini-project graded sooner
    • the highest score out of your mini-projects will be used as the score for the remainder of the labs

    Mini-Project Substitutions:

    • if you have another project that you would like to pursue in place of the standard mini-projects listed, then please propose it to both the class instructor and lab instructor
    • custom projects need to be approved by both class instructor and lab instructor beforehand; otherwise, they will not be accepted
    • please propose your custom project at least a week before the mini-project deadline
  • Hang Person

    At the end of this problem you should submit to Laulima (please zip these files to work around the 5 file limit):

    • a file named UHusername_hang_person.c
    • a file named UHusername_hang_person.h
    • a file named UHusername_hang_person_constants.h
    • a file named UHusername_hang_person_helpers.c
    • a file named UHusername_hang_person_helpers.h

      example:

      • zhaol_hang_person.c
      • zhaol_hang_person.h
      • zhaol_hang_person_constants.h
      • zhaol_hang_person_helpers.c
      • zhaol_hang_person_helpers.h
    • Write a program that allows Player 1 to enter in a phrase. Player 2 can then guess at the phrase by entering in letters. The game ends when Player 2 successfully fills in all the letters of the phrase or when Player 2 unsuccessfully guesses at the phrase a certain number of times. The limit on the number of guesses by Player 2 is determined by the programmer. Each time Player 2 types in a letter that is not in the phrase, there will be a visual indication showing how many more guesses Player 2 has. This visual indication could be a picture of something (it could be a person or something else), an animation that finishes, a progress bar, or anything that the programmer chooses.

  • Road Trip

    At the end of this problem you should submit to Laulima (please zip these files to work around the 5 file limit):

    • a file named UHusername_road_trip.c
    • a file named UHusername_road_trip.h
    • a file named UHusername_road_trip_constants.h
    • a file named UHusername_road_trip_helpers.c
    • a file named UHusername_road_trip_helpers.h

      example:

      • zhaol_road_trip.c
      • zhaol_road_trip.h
      • zhaol_road_trip_constants.h
      • zhaol_road_trip_helpers.c
      • zhaol_road_trip_helpers.h
    • Write a program that determines the shortest path from San Francisco to New York. The program will have access to the dataset found at https://github.com/zhaol/datasets/tree/trip.1.0.1. There will be 3 legs to the trip; each data file corresponds to a leg on the trip. The dataset lists the origin city (column 1), destination city (column 2), and the distance (column 3) between the origin and destination cities.

      You can download the dataset with any of the following methods:

        Using GIT (recommended):
      • cd into your mini-project folder
      • issue these command at the command prompt:
        • git clone https://github.com/zhaol/datasets.git
        • cd datasets
        • git checkout tags/trip.1.0.1
        Manually copying and pasting the files:
      • all the necessary files are listed here: https://github.com/zhaol/datasets/tree/trip.1.0.1
      • when copying and pasting the file content, be sure you are copying and pasting the contents of the files for version trip.1.0.1 (you should see "tag: trip.1.0.1" in the top left area)

      No matter which method you choose, be sure the version.txt file says:

      trip.1.0.1
        
        Road Trip Lab:
        Find shortest path
  • Satellite Receiver

    At the end of this problem you should submit to Laulima (please zip these files to work around the 5 file limit):

    • a file named UHusername_satellite_receiver.c
    • a file named UHusername_satellite_receiver.h
    • a file named UHusername_satellite_receiver_constants.h
    • a file named UHusername_satellite_receiver_helpers.c
    • a file named UHusername_satellite_receiver_helpers.h

      example:

      • zhaol_satellite_receiver.c
      • zhaol_satellite_receiver.h
      • zhaol_satellite_receiver_constants.h
      • zhaol_satellite_receiver_helpers.c
      • zhaol_satellite_receiver_helpers.h
    • Your company runs a satellite communication system. At the ground station, the receiver sub-system is comprised of 3 receivers, each located at different corners of the ground station. The ground station also has a super computer that takes in knowledge of the satellite location, real time input from the 3 receivers, weather conditions, etc and outputs the exact signal that was sent by the satellite. However, the super computer cannot produce this exact signal fast enough to be useful in a real communication system. It does, however, allow your receiver sub-system to compare the signals received from the satellite by the 3 receivers against the exact signal sent by the satellite in a given window of time. This comparison is performed once every hour and the results are used to select the receiver that is getting the "best" signal as the primary receiver for the remainder of the hour. Write a program to determine which of the 3 receiver is receiving the "best" signal.

      The "best" signal is the signal that most resembles the exact signal. One way to measure how different a signal is from another signal is by subtracting the signals from each other for each point in time, squaring the difference, and then adding all the squared differences together for each point in time. In other words, sum the square of the difference between the received signal and exact signal for each point in time. The signal with the lowest number ($δ_{receiver\_i}$) will be the "best" signal:

      $Δ_{receiver\_i} = ∑↙{t=0 seconds}↖{t=10 seconds} (signal_{receiver\_i,t} - signal_{exact,t})^2$

      The dataset lists the time (column 1) and the received signal (column 2).

      Example Calculation:

      You can download the dataset with any of the following methods:

        Using GIT (recommended):
      • cd into your mini-project folder
      • issue these command at the command prompt:
        • git clone https://github.com/zhaol/datasets.git
        • cd datasets
        • git checkout tags/receiver.1.0.1
        Manually copying and pasting the files:
      • all the necessary files are listed here: https://github.com/zhaol/datasets/tree/receiver.1.0.1
      • when copying and pasting the file content, be sure you are copying and pasting the contents of the files for version receiver.1.0.1 (you should see "tag: receiver.1.0.1" in the top left area)

      No matter which method you choose, be sure the version.txt file says:

      receiver.1.0.1
      
      Receiver Lab:
      Find best signal