User Tools

Site Tools


Sidebar

projects

wcp1 (due 20240124)
pct0 (bonus; due 20240125)
pct1 (bonus; due 20240125)
abc0 (due 20240131)
pct2 (due 20240131)
wcp2 (due 20240131)
gtf0 (due 20240207)
pct3 (bonus; due 20240207)
wcp3 (due 20240207)
dtr0 (due 20240214)
pct4 (due 20240214)
wcp4 (due 20240214)
bwp1 (bonus; due 20240228)
mmf0 (due 20240228)
pct5 (bonus; due 20240228)
wcp5 (due 20240228)
cnv0 (due 20240306)
gfo0 (due 20240306)
pct6 (due 20240306)
wcp6 (due 20240306)
cnv1 (due 20240313)
fwg0 (due 20240313)
pct7 (bonus; due 20240313)
wcp7 (due 20240313)
fwg1 (due 20240320)
pct8 (due 20240320)
wcp8 (due 20240320)
pct9 (bonus; due 20240327)
wcp9 (due 20240327)
bwp2 (bonus; due 20240410)
fwg2 (due 20240410)
fwg3 (due 20240410)
gfo1 (due 20240410)
pctA (due 20240410)
wcpA (due 20240410)
cpp0 (due 20240417)
pctB (bonus; due 20240417)
wcpB (due 20240417)
cpp1 (due 20240424)
pctC (due 20240424)
wcpC (due 20240424)
pctD (bonus; due 20240501)
wcpD (bonus; due 20240501)
gfo2 (due 20240508)
pctE (bonus; due 20240508)
wcpE (bonus; due 20240508)
EoCE (due 20240516)
haas:spring2024:cprog:projects:ngfx

Corning Community College

CSCS1320 C/C++ Programming

Project: NUMBER GAME FUN (ngfX)

Objective

To create an increasingly detailed program logic that implements and displays a playing field of a defined number/logic game.

NOTE

Due to similar descriptions among the range of projects, I have condensed everything into one common project page. Where you see “ngfX” please substitute the particular project you are working on (ie “ngf0”, “ngf1”, etc.)

Abstraction

As an exercise in toning your abstraction abilities (literally seeing one thing, but understanding and using it as something else), there will be a number of 'generic' terms used throughout this (and other) documents throughout the course, requiring you to substitute in the pertinent information (else face confusion or error).

Some examples:

  • yourusername - where you see this (likely in a config file or command-line argument), you are NOT to literally type in y-o-u-r-u-s-e-r-n-a-m-e, but instead, substitute in YOUR lab46 username.
  • desig - different classes have different class designations. To make one universal document pertinent to ALL classes, specific examples will instead use 'desig', where you must substitute in the class desig of the class YOU are taking and acting upon in that moment. Example class desigs:
    • c4eng - ENGR1050 “C for Engineers”
    • cprog - CSCS1320 “C/C++ Programming”
    • unix - CSCS1730 “UNIX/Linux Fundamentals”
    • data - CSCS2320 “Data Structures”
    • discrete - CSCS2330 “Discrete Structures”
    • comporg - CSCS2650 “Computer Organization”
    • sysprog - CSCS2730 “Systems Programming”

This sort of abstraction is very similar to that we will find in our utilization of variables in programming, where we can have a “name”, but the data associated with it can change based on various conditions.

Do not be a literalist computer! Start to exercise your abstraction abilities.

2023/01/18 11:37

Locational Awareness

This document is written with TWO locations in mind:

  • lab46 (the system you may retrieve resources and SUBMIT projects)
    • identified in examples with the use of the lab46:~$ prompt
  • your pi (the system you will transfer resources to/from, and WORK ON/COMPLETE projects)
    • identified in examples with the use of the yourpi:~$ prompt

There are commands you can ONLY run on one system or the other. Pay attention to any prompt cues in the given examples (or section headings, context of language leading up to any examples).

For example:

  • YOU cannot install software on lab46. You don't have access.
  • projects CANNOT be SUBMITTED on your pi.

Please pay attention to your prompt, so you can perform the needed activity on the correct system.

2023/01/18 11:37

Reading

Please be sure to familiarize yourself with any pertinent content in:

Please familiarize yourself with the table of contents and or index of the various resources, and sample various content to connect yourself with deeper understanding into the concepts being called upon in the current activity.

On your pi/system

Develop and test this program on your pi/development system. Only when done, verify that it compiles and runs on lab46, before submitting.

To utilize the needed functionality for this project, you will need to ensure you have the following packages installed:

  • build-essential (hopefully you took care of this in ntr0)
  • mercurial (also installed and configured in ntr0)

NOTE: make sure you, for the purposes of your activities pertaining to this class, that you are using your lab46 SEMESTER repository.

Specifications

Your program should:

  • have valid, descriptive variable names of length no shorter than 4 symbols
    • unless you have whole-word descriptors that happen to clock in at less than 4 symbols (such as “row”)
  • have consistent, well-defined indentation (no less than 4 spaces per level of indentation)
    • all code within the same scope aligned to its indentation level
  • have proximal comments explaining your rationale and what is going on, throughout your code
  • perform the intended operation, outputting the correct/accurate information in indicated format
  • at the end of your main() function, use a single return statement to conclude your code, return a 0 indicating successful operation

Grabbing project resources

To obtain project data, you will need to satisfy the following prerequisites:

  • be logged into lab46 (shell) as your user
  • have your semester lab46 repo cloned (into ~/src/SEMESTER)
  • have created the appropriate DESIG (like “cprog” or “unix”) subdirectory therein (~/src/SEMESTER/DESIG)
  • have changed into that ~/src/SEMESTER/DESIG directory

If all those conditions are met, you can use the grabit tool to obtain the project, as follows:

lab46:~/src/SEMESTER/DESIG$ grabit DESIG ngfX
make: Entering directory '/var/public/SEMESTER/DESIG/ngfX'
'/var/public/SEMESTER/DESIG/ngfX/Makefile' -> '/home/USER/src/SEMESTER/DESIG/ngfX/Makefile'
'/var/public/SEMESTER/DESIG/ngfX/README' -> '/home/USER/src/SEMESTER/DESIG/ngfX/README'
'/var/public/SEMESTER/DESIG/ngfX/ngfX.c' -> '/home/USER/src/SEMESTER/DESIG/ngfX/ngfX.c'
'/var/public/SEMESTER/DESIG/ngfX/ref_ngfX.aarch64' -> '/home/USER/src/SEMESTER/DESIG/ngfX/ref_ngfX.aarch64'
'/var/public/SEMESTER/DESIG/ngfX/ref_ngfX.armv7l' -> '/home/USER/src/SEMESTER/DESIG/ngfX/ref_ngfX.armv7l'
'/var/public/SEMESTER/DESIG/ngfX/ref_ngfX.x86_64' -> '/home/USER/src/SEMESTER/DESIG/ngfX/ref_ngfX.x86_64'
'/var/public/SEMESTER/DESIG/ngfX/tttX.c' -> '/home/USER/src/SEMESTER/DESIG/ngfX/tttX.c'
make: Leaving directory '/var/public/SEMESTER/DESIG/ngfX'
lab46:~/src/SEMESTER/DESIG$ 

At which point you can change into the newly created and populated ngfX directory.

Instructions

Further instructions are included amongst the project data you obtained via the 'grabit'

Compiling

Since the grabit brought in a Makefile, you can compile your code simply by typing: make

Any compiler errors will go into a text file called errors; you can view any of these generated compile-time messages by viewing the error files: cat errors or less errors

To do a full cleaning, run: make clean then make (or make debug)

If you'd like to see compiler messages as you compile (versus having them go into the errors file, run: make debug

When done and ready to submit, on lab46: make submit

Raspberry Pi/development system command-line via SSH/MOSH

If you don't have a monitor, you likely are logging into your pi/development system remotely (doable, and good intra-system practice)

Once your ngfX project files are 'hg' added to your repository on lab46, commit and push them there as well.

On your pi/development system, to obtain those files there, be sure to be in your cloned repository directory, and 'hg' pull and update.

NOTE: To avoid repository conflicts, ALWAYS check for any incoming pull/update transactions before doing a commit/push. Problems occur when you forget (this is an issue on both lab46 and your pi/development system).

Compile:

lab46:~/src/SEMESTER/DESIG/ngfX$ make

and run your program:

lab46:~/src/SEMESTER/DESIG/ngfX$ ./ngfX.ARCH

Submission

To successfully complete this project, the following criteria must be met:

  • Code must compile cleanly (no notes, warnings, nor errors)
    • Even if it compiles and runs, make sure there are no notes or warnings in the 'errors' file.
    • A 'make clean' will empty out old messages, so you may want to do that before a final compile to ensure everything is prim and proper.
  • Output must be correct, and match the form given in the sample output above.
  • Code must be nicely and consistently indented
  • Code must be well commented
  • Do NOT double space your code. Group like statements together.
  • Output Formatting (including spacing) of program must conform to the provided output (see above).
  • Track/version the source code in a repository
  • Submit a copy of your source code to me using the submit tool.

To submit this program to me using the submit tool, run the following command at your lab46 prompt:

lab46:~/src/SEMESTER/DESIG/ngfX$ make submit

Project backup process commencing

Taking snapshot of current project (ngfX)      ... OK
Compressing snapshot of ngfX project archive   ... OK
Setting secure permissions on ngfX archive     ... OK

Project backup process complete

Submitting DESIG project "ngfX":
    -> ../ngfX-DATESTAMP-HOUR.tar.gz(OK)

SUCCESSFULLY SUBMITTED
lab46:~/src/SEMESTER/DESIG/ngfX$ 

You should get some sort of confirmation indicating successful submission if all went according to plan. If not, check for typos and or locational mismatches.

What I'll be looking for:

SCORE:ngfX:final tally of results (SCORE/TOTAL)
*:ngfX:obtained via grabit by Sunday before deadline [#/#]
*:ngfX:program compiles successfully, no errors [#/#]
*:ngfX:program compiles with no warnings [#/#]
*:ngfX:program performs stated task/algorithm [#/#]
*:ngfX:program output conforms to formatting expectations [#/#]
*:ngfX:proper error checking and status reporting performed [#/#]
*:ngfX:code implements solution using relevant concepts [#/#]
*:ngfX:code updates committed/pushed to lab46 semester repo [#/#]
*:ngfX:code uses correct variable types and name lengths [#/#]
*:ngfX:project is submitted with relevant and complete source [#/#]
*:ngfX:project is submitted on lab46 using 'make submit' [#/#]
*:ngfX:code contains adequate, consistent, useful comments [#/#]
*:ngfX:runtime tests of submitted program succeed [#/#]

Additionally:

  • Solutions not abiding by SPIRIT of project will be subject to a 25% overall deduction
  • Solutions not utilizing descriptive why and how COMMENTS will be subject to a 25% overall deduction
  • Solutions not utilizing INDENTATION to promote scope and clarity will be subject to a 25% overall deduction
  • Solutions lacking ORGANIZATION and are not easy to read (within 90 char width) are subject to a 25% overall deduction
project (ngfX) point item (#) total points (TOTAL)
ngf0 2 26
ngf1 3 39
ngf2 4 52
ngf3 5 65
ngf4 6 78
ngf5 7 91
ngf6 7 91
haas/spring2024/cprog/projects/ngfx.txt · Last modified: 2023/01/29 12:20 by 127.0.0.1