User Tools

Site Tools


haas:fall2019:c4eng:projects:cos0

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

haas:fall2019:c4eng:projects:cos0 [2018/09/24 14:23] – external edit 127.0.0.1haas:fall2019:c4eng:projects:cos0 [2019/10/28 13:24] (current) wedge
Line 1: Line 1:
 <WRAP centeralign round box> <WRAP centeralign round box>
 <WRAP><color red><fs 200%>Corning Community College</fs></color></WRAP> <WRAP><color red><fs 200%>Corning Community College</fs></color></WRAP>
-<WRAP><fs 150%>CSCS1320 C/C++ Programming</fs></WRAP>+<WRAP><fs 150%>ENGR1050 for Engineers</fs></WRAP>
 </WRAP> </WRAP>
  
Line 13: Line 13:
  
   * can algorithmically generate a circle of points (x, y coordinate pairs)   * can algorithmically generate a circle of points (x, y coordinate pairs)
-  * can obtain information from the command-line (argc/argv) 
   * can call functions from a library (gd).   * can call functions from a library (gd).
 +
 =====Background===== =====Background=====
 We've spent our time so far this semester covering the basic concepts of programming, in C. Variables, selection statements, iteration, functions, structs, etc. We've spent our time so far this semester covering the basic concepts of programming, in C. Variables, selection statements, iteration, functions, structs, etc.
  
-Now that we've gotten through all of them, it is time to start applying those concepts so that deeper and further familiarity can be gained. This project is one such attempt at that.+Now that we've gotten through a good deal of them, it is time to start applying those concepts so that deeper and further familiarity can be gained. This project is one such attempt at that.
  
 We all know what a circle is, and in various math classes we've even explored various methods for doing things with circles (they have a radius, a circumference, a diameter), but how would we enable the computer to draw a circle? We all know what a circle is, and in various math classes we've even explored various methods for doing things with circles (they have a radius, a circumference, a diameter), but how would we enable the computer to draw a circle?
Line 24: Line 24:
 One piece of that, obviously, is the math. One piece of that, obviously, is the math.
  
-Another piece is the programmatic piece. A circle implies something visual. On the computer that means an image.+Another aspect of that is the programmatic piece. A circle implies something visual. On the computer that means an image.
  
 So: we are going to use the gd image processing library to aid us in generating the image. So: we are going to use the gd image processing library to aid us in generating the image.
  
 =====Program===== =====Program=====
-Your task is to write a program that generates an image (PNG file), that is placed in your lab46 webspace for viewing, that does the following:+Your task is to write a program that generates an image (PNG file), that is placed in your lab46 webspace (**~/public_html/cos0/**) for viewing, that does the following:
  
   * uses the gd image library (libgd)   * uses the gd image library (libgd)
-  * reads the following information from the command-line (lacking this information should result in an error): +  * prompts for the following information (doing proper error and range checks as appropriate): 
-    * *(argv+1): image width (in pixels, ranging from 600-1024) +    * image width (in pixels, ranging from 600-1024) 
-    * *(argv+2): image height (in pixels, ranging from 800-1280) +    * image height (in pixels, ranging from 800-1280) 
-    * *(argv+3): circle radius (in pixels, should not exceed half of the smaller of width, height) +    * circle radius (in pixels, should not exceed half of the smaller of width, height) 
-    * *(argv+4): center x of circle (a value of 0 should result in auto-centering of x with respect to width) +    * center x of circle (a value of 0 should result in auto-centering of x with respect to width) 
-    * *(argv+5): center y of circle (a value of 0 should result in auto-centering of y with respect to height) +    * center y of circle (a value of 0 should result in auto-centering of y with respect to height) 
-    * *(argv+6), if present, will be the name of the output image file produced. If it is absent, assume the default name **cos0.png**. +  * image width, height is at least 600x800 (can be larger, but not huge, don't go beyond 1024x1280) 
-  * image width, height is at least 600x800 (can be larger, but not huge, don't go beyond 1024x1280)-- and specified on the command-line when running the program +    * if the correct information isn't supplied, display an error and exit with non-zero status
-    * if the information isn't supplied, display an error and exit with non-zero status+
     * image resolution must not be square (i.e. **NOT** 800x800, 1000x1000, etc.)-- if it is, display an error and exit with non-zero status     * image resolution must not be square (i.e. **NOT** 800x800, 1000x1000, etc.)-- if it is, display an error and exit with non-zero status
   * image has a black background   * image has a black background
Line 49: Line 48:
       * multiple circles (concentric?)       * multiple circles (concentric?)
       * spirals       * spirals
-    * squares should be at least 12x12 (pixels)+    * squares should be at least 32x32 (pixels)
  
 Now, gd has functions for drawing circles. You are **NOT** to use them for this project. As I said, this is a circle //of squares//. As such, you will be making use of the **gdImageFilledRectangle()** function. Now, gd has functions for drawing circles. You are **NOT** to use them for this project. As I said, this is a circle //of squares//. As such, you will be making use of the **gdImageFilledRectangle()** function.
  
-====getting started==== +=====Grabbing project resources===== 
-You may make use of the following skeleton program to assist you in doing this project.+I have prepared a **grabit** for resources related to this project. To obtain:
  
-Note that this code is not in conformance with project specifications, but is provided to give you a starting place for modifications and additions:+<cli> 
 +lab46:~/src/c4eng$ grabit c4eng cos0 
 +make: Entering directory '/var/public/fall2019/c4eng/cos0' 
 +'/var/public/fall2019/c4eng/cos0/Makefile' -> '/home/wedge/src/c4eng/cos0/Makefile' 
 +'/var/public/fall2019/c4eng/cos0/cos0.c' -> '/home/wedge/src/c4eng/cos0/cos0.c' 
 +make: Leaving directory '/var/public/fall2019/c4eng/cos0' 
 +lab46:~/src/c4eng$  
 +</cli>
  
-<code c> +At which point you can change into the newly created and populated **cos0** directory.
-/* +
- * cos0.c   - skeleton code to use the GD graphics library +
-                        to create an image (circle of squares). +
- * +
- * To compile: type 'make' to compile the program +
-         or: gcc --std=c99 -Wall -o cos0 cos0.c -lgd +
- To execute: ./cos0 ARGS +
- * +
- * Documentation:  http://www.boutell.com/gd/manual2.0.33.html +
-                 https://libgd.github.io/manuals/2.1.1/index/Functions.html +
- */ +
-#include <stdio.h> +
-#include <stdlib.h> +
-#include <string.h> +
-#include <sys/stat.h> +
-#include <gd.h> +
- +
-// color values +
-// +
-#define BLACK       0 +
-#define BLUE        1 +
-#define GREEN       2 +
-#define RED         3 +
-#define WHITE       4 +
- +
-int main(int argc, char **argv) +
-+
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Declare variables +
-        // +
-        char               *outfile;    // name out of the output file +
-        FILE               *out;        // output file pointer +
-        gdImagePtr          img;        // GD Image Construct +
-        unsigned int        color[5];   // color array +
-        unsigned short int  wide, high; // image attributes +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Check arguments +
-        // +
-        if (argc     == 2) +
-        { +
-                outfile   = *(argv+1); +
-                fprintf(stdout, "Using '%s' as output filename\n", outfile); +
-        } +
-        else +
-        { +
-                outfile   = (char *) malloc (sizeof(char) * 64); +
-                sprintf(outfile, "/home/%s/public_html/cos0.png", getenv("USER")); +
-        } +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // image dimensions +
-        // +
-        wide          = 600; +
-        high          = 800; +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Create new image of specified wide-ness and high-ness +
-        // +
-        img           = gdImageCreate(wide, high); +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Some GD color definitions +
-        // +
-        color[BLACK]  = gdImageColorAllocate(img, 0x00, 0x00, 0x00); +
-        color[BLUE]   = gdImageColorAllocate(img, 0x00, 0x00, 0xFF); +
-        color[GREEN]  = gdImageColorAllocate(img, 0x00, 0xFF, 0x00); +
-        color[RED]    = gdImageColorAllocate(img, 0xFF, 0x00, 0x00); +
-        color[WHITE]  = gdImageColorAllocate(img, 0xFF, 0xFF, 0xFF); +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Paint the background black +
-        // +
-        gdImageFilledRectangle(img, 0, 0, wide-1, high-1, color[BLACK]); +
- +
-    /**************************************************************** +
-                                                                  * +
-      =============>  YOUR CODE/PROGRAM GOES HERE  <============ +
-                                                                  * +
-     ****************************************************************/ +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Open the file +
-        // +
-        out           = fopen(outfile, "wb"); +
-        if(out       == NULL) +
-        { +
-                fprintf(stderr, "Error opening '%s'\n", outfile); +
-                exit(1); +
-        } +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Set sane file permissions on image file +
-        // +
-        chmod (outfile, 0644); +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Send image to file +
-        // +
-        gdImagePngEx(img, out, -1); +
- +
-        ////////////////////////////////////////////////////////////////// +
-        // +
-        // Close things up +
-        // +
-        fclose(out); +
-        gdImageDestroy(img); +
- +
-        return(0); +
-+
-</code>+
  
 =====How to view your image===== =====How to view your image=====
Line 185: Line 71:
 To view your image in a web browser, simply point it at the following URL: To view your image in a web browser, simply point it at the following URL:
  
-  * <nowiki>https://lab46.g7n.org/~USERNAME/IMAGE.png</nowiki>+  * <nowiki>https://lab46.g7n.org/~USERNAME/DIRECTORY/IMAGE.png</nowiki>
  
-... where "USERNAME" is your lab46 username (in lowercase), and "IMAGE" is the name of your png file (likely also in lowercase, such as 'cos0').+... where "USERNAME" is your lab46 username (in lowercase), "DIRECTORY" will be the name of the project ('cos0'), and "IMAGE" is the name of your png file (likely also in lowercase, such as 'cos0.png').
  
 Note that the tilde just prior to your username in the URL is critical and necessary. Note that the tilde just prior to your username in the URL is critical and necessary.
- 
-=====Grabit Integration===== 
-I rigged up a skeleton file in a **grabit** project to kickstart your efforts. 
- 
-To "grab" it: 
- 
-<cli> 
-lab46:~/src/cprog$ grabit cprog cos0 
-make: Entering directory '/var/public/SEMESTER/cprog/cos0' 
-‘/var/public/SEMESTER/cprog/cos0/Makefile’ -> ‘/home/USERNAME/src/cprog/cos0/Makefile’ 
-‘/var/public/SEMESTER/cprog/cos0/cos0.c’ -> ‘/home/USERNAME/src/cprog/cos0/cos0.c’ 
-make: Leaving directory '/var/public/SEMESTER/cprog/cos0' 
-lab46:~/src/cprog$ cd cos0 
-lab46:~/src/cprog/pos0$ ls 
-Makefile  cos0.c 
-lab46:~/src/cprog/pos0$  
-</cli> 
  
 And, of course, your basic compile and clean-up operations: And, of course, your basic compile and clean-up operations:
Line 234: Line 103:
  
 <cli> <cli>
-$ submit cprog cos0 cos0.c cos0.png http://lab46.corning-cc.edu/~USERNAME/cos0.png +$ submit c4eng cos0 cos0.c 
-Submitting cprog project "cos0":+Submitting c4eng project "cos0":
     -> cos0.c(OK)     -> cos0.c(OK)
-    -> cos0.png(OK) 
-    -> http://lab46.corning-cc.edu/~USERNAME/cos0.png 
  
 SUCCESSFULLY SUBMITTED SUCCESSFULLY SUBMITTED
Line 249: Line 116:
 <code> <code>
 78:cos0:final tally of results (78/78) 78:cos0:final tally of results (78/78)
-*:cos0:submit project [4/4+*:cos0:proper error checking and status reporting performed [13/13
-*:cos0:level of adequate modification in cos0.c [4/4+*:cos0:correct variable types and name lengths used [13/13
-*:cos0:level of adequate commenting in cos0.c [4/4+*:cos0:proper output formatting per specifications [13/13
-*:cos0:level of adequate indentation in cos0.c [4/4] +*:cos0:runtime tests of submitted program succeed [13/13
-*:cos0:cos0.c generates circle via algorithm [8/8+*:cos0:no negative compiler messages for program [13/13
-*:cos0:no negative compiler messages [4/4+*:cos0:code is pushed to lab46 repository [13/13]
-*:cos0:circle of squares is achieved [8/8] +
-*:cos0:deployed to public_html [4/4] +
-*:cos0:checks for and implements error conditions [6/6] +
-*:cos0:image width and height cannot be the same [4/4] +
-*:cos0:cos0.c commit and pushed to lab46 repo [4/4] +
-*:cos0:makes use of gd image library [4/4] +
-*:cos0:reads image details in via arguments [4/4] +
-*:cos0:can adjust output file name with optional last argument [4/4] +
-*:cos0:image border meets specifications [4/4] +
-*:cos0:image background meets specifications [4/4] +
-*:cos0:circle color meets specifications [4/4] +
-*:cos0:circle size meets specifications [4/4]+
 </code> </code>
  
 Additionally: Additionally:
 +
   * Solutions not abiding by spirit of project will be subject to a 25% overall deduction   * 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 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 not utilizing indentation to promote scope and clarity will be subject to a 25% overall deduction
-  * Solutions not organized and easy to read (assume a terminal at least 90 characters wide, 40 characters tall) are subject to a 25% overall deduction+  * Solutions not organized and easy to read are subject to a 25% overall deduction
haas/fall2019/c4eng/projects/cos0.1537798998.txt.gz · Last modified: 2018/09/24 14:23 by 127.0.0.1