Table of Contents

Shane Swimley's Spring 2012 Opus

Introduction

Description:Shane Swimley, Male, American

Pursuits: Win

Interests: Video Games, Movies, The NFL, Computing

Part 1

Entries

Entry 1: February 07, 2012

As an aid, feel free to use the following questions to help you generate content for your entries:

  • What action or concept of significance, as related to the course, did you experience on this date?

In the first days of class concepts of significance that I have taken away from said learning are:

svn add and svn commit actions.

pointers, using pointers in C programming code.

integers, chars, using integers and chars as pointers, using integers and chars in C programming code.

include action, using include actions in C programming to use libraries.

  • Why was this significant?

The svn commands are great for saving information to your directories and committing changes.

The pointers are used to have something exist in memory but no be contained in a certain place.

The integers and chars can be used to declare variables.

The include action is used to reference pre-existing libraries contained in the C programming language.

  • What concepts are you dealing with that may not make perfect sense?

Something that does not make perfect sense to me at this point in the class so far is the “%u\n” “%d\n” portions of code.

  • What challenges are you facing with respect to the course?

My challenge with a C programming course is that I have no previous experience with a programming language, a lot of new information to grasp.

Entry 2: February 16, 2012

With this in class example we used pointers, malloc, a while loop, if condition, else and else if condition, srand, time, NULL,

malloc was a call for an allocation of memory.

While loop with conditions was our implementation to keep the program running for more than one instance.

srand was our pseudo random number generator.

time was our value system of numbers that srand used to return random numbers? I think.

If I remember correctly when you NULL something you are acknowledging that it exists without physically or logically assigning it a specific value, out it's were the integer pointers input and pick.

We also talked about how it was difficult for a computer to be random without eventually becoming predictable in some way, due to the facts of the way a computer operates always following instructions, and not having the distinct ability to make a decision on it's own accord.

#include<stdio.h>

#include<stdlib.h>

int main()

{

int *input, *pick; input=pick=NULL;
input=(int *)malloc(sizeof(int)*1);
pick=(int *)malloc(sizeof(int)*1);
*input=0;
*pick=0;
while(*pick !=-1)
{
	srand(time(NULL));
	*pick=rand()%99+1;
	printf("Guess the computer's pick: ");
	scanf("%d", input);
	if(*input==*pick)
	{
		printf("Congratulations you have won\n");
	}
	else if(*input > *pick)
	{
		printf("Your guess was high\n");
	}
	else
	{
		printf("Your guess was low\n");
	}
	printf("Computer had %d\n", *pick);
	printf("0 to play again, -1 to quit\n");
	scanf("%d", pick);
}
return(0);

}

Entry 3: February 16, 2012

With this class example we used new C/C++ components argc and argv

argc in C/C++ is the argument count within a programs pseudo code, we used the argument counter in this program to say that if the argument count was less than 2 the program would print a string message to the user telling them that need more arguments and how many arguments they actually provided.

argv is an abbreviation for an argument vector, we used argv as a double pointer character, that is really the best I can explain what this is doing at this point.

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv)
 
{
	unsigned char i;
	if(argc<2)
	{
		printf("%8s must be run with 1 or more arguments, you only provided %hhu\n",(argc-1));
		exit(1);
	}
	printf("You ran this program with %hhu arguments, they are:\n",(argc-1));
	for(i=1;i<argc;i++)
	{
		printf("argv[%hhu]: %s\n",i,*(argv+i));
	}
	return(0);
}

Entry 4: February 20, 2012

I am adding all of the coded examples that we have done in class so far as my 4th opus entry. Probably add some textual content about what each program was focusing on once I get the format of the entry all setup with the all the examples included.

Example 1

#include
<stdio.h>
int main()
 
{
	printf("an int is %u bytes\n", sizeof(int));
	return(0);
}

Example 2

#include
<stdio.h>
int main()
{
	int a;
	a=0;
	printf("a contains %u\n", a);
	printf("a's address is 0x%x\n", &a);
	return(0);
}
Addition to var2.c
#include<stdio.h>
int main()
{
	int a=0;
	int *b;
	b=&a;
	*b=12;
	printf("a contains %u\n", a);
	printf("a's address is 0x%x\n", &a);
	printf("b contains %u\n, *b);
	printf("b points to 0x%x\n, b);
	printf("b's address is 0x%x\n",&b);
	return(0);
}	

Example 3

#include<stdio.h>
int main()
{
	int v=17;  //setting the integer v equal to the number 17
	int *p1=NULL; //setting the pointer p1 to NULL, NULL is allowing p1 to exist without 				assigning an exact value
	printf(“v is %u\n”, v);  //having the computer display or “print out” the value of v
	p1=&v;
	printf(*p1 is %u\n”, *p1);
	*p1=53;
	printf(“v is %u\n”, v);
	printf(*p1 is %u\n”, *p1);
	v=7;
	printf(“v is %u\n”, v);
	printf(*p1 is %u\n”, *p1);
	return(0);
}

Example 4

#include<stdio.h>
int main()
{
	int num=0;
	printf(“Please enter an integer value:);
	scanf(%d”,&num);
	printf(“You just input %d\n”,num);
	if((num % 2) == 0)
	{
		printf(“It is even.\n”);
	}
	else
	{
		printf(“It is odd.\n”);
	}
	return(0);
}

Example 5

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *p1,*p2,**p4;
	p1=(int *)malloc(sizeof(int)*1);
	*p1=26;
	printf("*p1 is %u\n",*p1);
	p2=p1;
	p4=&p1;
	printf("**p4 is %u\n",**p4);
	printf("*p2 is %u\n",*p2);
	*p2=61;
	printf("*p1 is %u\n",*p1);
	printf("**p4 is %u\n",**p4);
	printf("*p2 is %u\n",*p2);
	**p4=16384;
	printf("*p1 is %u\n",*p1);
	printf("**p4 is %u\n",**p4);
	printf("*p2 is %u\n",*p2);
	return(0);
}

Example 6

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int *input, *pick; input=pick=NULL;
	input=(int *)malloc(sizeof(int)*1);
	pick=(int *)malloc(sizeof(int)*1);
	*input=0;
	*pick=0;
	while(*pick !=-1)
	{
		srand(time(NULL));
		*pick=rand()%99+1;
		printf("Guess the computer's pick: ");
		scanf("%d", input);
		if(*input==*pick)
		{
			printf("Congratulations you have won\n");
		}
		else if(*input > *pick)
		{
			printf("Your guess was high\n");
		}
		else
		{
			printf("Your guess was low\n");
		}
		printf("Computer had %d\n", *pick);
		printf("0 to play again, -1 to quit\n");
		scanf("%d", pick);
	}
	return(0);
}

Example 7

#include<stdio.h>
#include<stdlib.h>
 
int main()
{
        char *value,i;
        value=(char *)malloc(sizeof(char)*4);
        *(value+0)=0;
        *(value+1)=1;
        fprintf(stdout, "please enter a value (-128-+127):");
        fscanf(stdin,"%hhd",&i);
        *(value+2)=i;
        *(value+3)=(2*i)+3;
        for(i=3;i>=0;i--) //(i=0;i<=3;i++)
        {
                printf("%hhd\n",*(value+i));
        }
        return(0);
}

Example Sample

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char **argv) //parameters are in the ( ), first parameter of main must be an integer
{
        unsigned char i;
 
        if(argc<2)
        {
                printf("%8s must be run with 1 or\
 more arguments, you only provided %hhu\n",*(argv+0),(argc-1));
                exit(1); // \ followed by enter allows you to continue code on new line
        }
        printf("You ran this program with %hhu arguments, they are:\n",(argc-1));
        for(i=1;i<argc;i++)
        {
                printf("argv[%hhu]: %s\n",i,*(argv+i));
        }
        return(0);
}

Example FileFun

#include<stdio.h>
#include<stdlib.h>

int main()
{
        FILE *in,*out;
        char value=0;
        in=fopen("file.txt","r");
        out=fopen("out.txt","w");
        if(in==NULL)
        {
                printf("ERROR!\n");
                exit(1);
        }
        fscanf(in,"%hhd",&value);
        while(value != -1)
        {
                value*=2;
                fprintf(out,"%hhd\n",value);
                fscanf(in,"%hhd",&value);
        }
        fclose(in);
        fclose(out);
        return(0);
}

Project 0 or as I like to call it range.c

#include <stdio.h>
#include <math.h>
int main()
{
    // Variables
    unsigned long long int quantity = 0;
    unsigned char uc = 0;
    signed char sc = 0;
    unsigned short int usi = 0;
    signed short int ssi = 0;
    unsigned int ui = 0;
    signed int si = 0;
    unsigned long int uli = 0;
    signed long int sli = 0;
    unsigned long long int ulli = 0;
    signed long long int slli = 0;
    // Display information for unsigned char data type
    printf("An unsigned char is %d bytes\n", sizeof(uc));
    printf("The range of an unsigned char is %hhu to %hhu\n", uc, (uc-1));
    quantity = (unsigned char)(uc-1) + 1;    // What does this line do?
    printf("An unsigned char can store %llu unique values\n\n", quantity);
    // Display information for signed char data type
    printf("A signed char is %d bytes\n", sizeof(sc));
    quantity = (unsigned long long int)pow(2, (sizeof(sc)*8)); // What is happening?
    printf("The range of a signed char is %hhd to %hhd\n", (sc-(quantity/2)), (sc+(quantity/2)-1));
    printf("A signed char can store %llu unique values\n\n", quantity);
    // Display information for unsigned short int data type
    printf("An unsigned short int is %d bytes\n", sizeof(usi));
    printf("The range of an unsigned short int is %hhu to %hhu\n", usi, (usi-1));
    quantity = (unsigned short int)(usi-1) + 1;    // What does this line do?
    printf("An unsigned short int can store %llu unique values\n\n", quantity);
    // Display information for signed short int data type
    printf("A signed short int is %d bytes\n", sizeof(ssi));
    quantity = (unsigned long long int)pow(2, (sizeof(ssi)*8)); // What is happening?
    printf("The range of a signed short int is %hhd to %hhd\n", (ssi-(quantity/2)), (ssi+(quantity/2)-1));
    printf("A signed short int can store %llu unique values\n\n", quantity);
    // Display information for unsigned int data type
    printf("An unsigned int is %d bytes\n", sizeof(ui));
    printf("The range of an unsigned int is %hhu to %hhu\n", ui, (ui-1));
    quantity = (unsigned int)(ui-1) + 1;    // What does this line do?
    printf("An unsigned int can store %llu unique values\n\n", quantity);
    // Display information for signed int data type
    printf("A signed int is %d bytes\n", sizeof(si));
    quantity = (unsigned long long int)pow(2, (sizeof(si)*8)); // What is happening?
    printf("The range of a signed int is %hhd to %hhd\n", (si-(quantity/2)), (si+(quantity/2)-1));
    printf("A signed int can store %llu unique values\n\n", quantity);
    // Display information for unsigned long int data type
    printf("An unsigned long int is %d bytes\n", sizeof(uli));
    printf("The range of an unsigned long int is %hhu to %hhu\n", uli, (uli-1));
    quantity = (unsigned long int)(uli-1) + 1;    // What does this line do?
    printf("An unsigned long int can store %llu unique values\n\n", quantity);
    // Display information for signed long int data type
    printf("A signed long int is %d bytes\n", sizeof(sli));
    quantity = (unsigned long long int)pow(2, (sizeof(sli)*8)); // What is happening?
    printf("The range of a signed long int is %hhd to %hhd\n", (sli-(quantity/2)), (sli+(quantity/2)-1));
    printf("A signed long int can store %llu unique values\n\n", quantity);
    // Display information for unsigned long long int data type
    printf("An unsigned long long int is %d bytes\n", sizeof(ulli));
    printf("The range of an unsigned long long int is %hhu to %hhu\n", ulli, (ulli-1));
    quantity = (unsigned long long int)(ulli-1) + 1;    // What does this line do?
    printf("An unsigned long long int can store %llu unique values\n\n", quantity);
    // Display information for signed long long int data type
    printf("A signed long long int is %d bytes\n", sizeof(slli));
    quantity = (unsigned long long int)pow(2, (sizeof(slli)*8)); // What is happening?
    printf("The range of a signed long long int is %hhd to %hhd\n", (slli-(quantity/2)), (slli+(quantity/2)-1));
    printf("A signed long long int can store %llu unique values\n\n", quantity);
    return(0);
}

Project 1 or as I like to call it Project2.c and Project2.1.c

#include<stdio.h>
#include<stdlib.h>
 
int main()
{
        FILE *message, *key, *cipher;
        char c, fname[] = "message.txt";
        char code[] = "key.txt";
        int keyvalue;
 
        message = fopen(fname, "r");
        key = fopen(code, "r");
        cipher = fopen("cipher.txt", "w");
 
        c = fgetc(message);
        fscanf(key,"%d",&keyvalue);
 
        printf("Message is: ");
 
        while(c != EOF)
        {
                fprintf(stdout, "%c", c);
                c = fgetc(message);
        }
 
        fclose(message);
        message = fopen(fname, "r");
        c = fgetc(message);
 
        printf("Cipher is: ");
 
        while(c != EOF)
        {
                if((c >= 65) && (c <= 'Z'))
                        c = c + keyvalue;
                else if((c >= 'a') && (c <= 'z'))
                        c = c + keyvalue;
 
                fprintf(stdout, "%c", c);
                fprintf(cipher, "%c", c);
                c = fgetc(message);
        }
        fclose(message);
        fclose(key);
        return(0);
}
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
        FILE *cipher, *key, *decipher;
        char c, fname[] = "cipher.txt";
        char code[] = "key.txt";
        int keyvalue;
 
        cipher = fopen(fname, "r");
        key = fopen(code, "r");
        decipher = fopen("decipher.txt", "w");
 
        c = fgetc(cipher);
        fscanf(key,"%d",&keyvalue);
 
        printf("Cipher is: ");
 
        while(c != EOF)
        {
                fprintf(stdout, "%c", c);
                c = fgetc(cipher);
        }
 
        fclose(cipher);
        cipher = fopen(fname, "r");
        c = fgetc(cipher);
 
        printf("Decipher is: ");
 
        while(c != EOF)
        {
                if((c >= 65) && (c <= 'Z'))
                        c = c - keyvalue;
                else if((c >= 'a') && (c <= 'z'))
                        c = c - keyvalue;
 
                fprintf(stdout, "%c", c);
                fprintf(decipher, "%c", c);
                c = fgetc(cipher);
        }
        fclose(cipher);
        fclose(key);
        return(0);
}

Keywords

cprog Keywords

cprog Keyword 1

Standard I/O (STDIO, STDOUT, STDERR).

Definition

Standard I/O stands for the Standard Input and Output, standard input devices are commonly keyboards or mice, etc… standard outputs are monitors, printers, etc…

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

/*
 * Sample code block
 */
while(c != EOF)
        {
                if((c >= 65) && (c <= 'Z'))
                        c = c - keyvalue;
                else if((c >= 'a') && (c <= 'z'))
                        c = c - keyvalue;
 
                fprintf(stdout, "%c", c);

cprog Keyword 2

Pointers (address of, assignment, dereferencing)

Definition

Pointers are used to reference information, you would use a pointer to not directly place something but to reference multiple “things” to that location via a pointer.

Pointers are indicated with * symbol, pointers can contain more than one * as in ,*, and so on….

The * in a pointer is usually followed by a defining word or phrase or character, in my example listed I have *cipher, *key, and *decipher

The *cipher is a pointer to cipher and not actually cipher.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

/*
 * Sample code block
 */
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
        FILE *cipher, *key, *decipher;

cprog Keyword 3

Arithmetic (equations, operators)

Definition

Mathematical logic that is used in pseudo codes syntax (IE: +,-,/,x,>,<,=,==,!=)

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

 while(c != EOF)
        {
                if((c >= 65) && (c <= 'Z'))
                        c = c + keyvalue;
                else if((c >= 'a') && (c <= 'z'))
                        c = c + keyvalue;

cprog Keyword 4

Arrays (standard notation, pointer arithmetic, single-dimensional, multi-dimensional)

Definition

series list of memory values linked by a common name and data type.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
num someVals[3]=25,44,22
 
    return(0);
}

cprog Keyword 5

Header Files (Local and System), C Standard Library (Libc), Libraries

Definition

Collection of predefined functions and syntax that can loaded as a library header file.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

/*
 * Sample code block
 */
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
    return(0);
}

cprog Keyword 6

File Access (Read, Write, Append)

Definition

The File Access of a File determines the privileges the user has with the file upon opening said file, whether it be just being able to read, or read and write a new file, or append and add to an existing file(s)

Demonstration

Demonstration of the chosen keyword.

I believe that when you are trying to add or deny file access you would as follows

+r to allow reading, -r to not allow read

+w to write, -w to not allow writing

+a to allow appending, and -a to not…

cprog Keyword 7

logic and operators (and, or, not, xor)

Definition

logic operators like and, or, not, xor compare expressions, Boolean expressions in particular, they are also used to compare two expressions or sentences.

Demonstration

Demonstration of the chosen keyword.

x = Not 23 > 12   ' x equals False.
x = Not 23 > 67   ' x equals True.

cprog Keyword 8

Variables (types, ranges, sizes)

Definition

variables are identifiers that create a permanent “existence” the variable could be named anything from the letter x to the name Shane.

their are different types of variables that are pre-determined the c language for size allocation purposes; like:( char, int, long int…so on)

Demonstration

Demonstration of the chosen keyword.

    unsigned long long int quantity = 0;
    unsigned char uc = 0;
    signed char sc = 0;
    unsigned short int usi = 0;
    signed short int ssi = 0;
    unsigned int ui = 0;
    signed int si = 0;
    unsigned long int uli = 0;
    signed long int sli = 0;
    unsigned long long int ulli = 0;
    signed long long int slli = 0;

cprog Objective

cprog Objective

To learn the programming languages c and c++?

Definition

variables, pointers, classes, code, arrays, logic operators, math, header files…

Method

I will try my best and reflect that effort on a grade based system administered from professors.

Measurement

I don't really know much about this coming into this class but I know much more then I did, I can't really say that amounts to anything impressive to someone that does this for a living but I could probably hold a common conversation on the topic now.

Analysis
  • How did you do?

I probably could have learned more if I wasn't taking 4 other classes that were all full of brand new information at the same time, but ya know.

  • Is there room for improvement?

yes.

  • Could the measurement process be enhanced to be more effective?

sure?

  • Do you think this enhancement would be efficient to employ?

again sure?

  • Could the course objective be altered to be more applicable? How would you alter it?

I would try some simpler things for people that have no idea what is going on, and have been looking at this subject of study for the first time with this class.

Experiments

Experiment 1

Question

What will happen if I take the ; off the end of a statement and try to compile the program.

Resources

lab46

Hypothesis

Based on what I have learned thus far about c programming I think there would be an error in trying to compile the program.

I believe it would be considered a syntax error and the would be the reason there would be an error in trying to compile.

Experiment

I am going to experiment on a hello world program we wrote in class this semester on lab46

Data

lab46:~$ nano hello.c
lab46:~$ gcc -o hello hello.c
hello.c: In function 'main':
hello.c:5: error: expected ';' before 'return'
lab46:~$

Analysis

Based on the data collected:

  • Was your hypothesis correct?

yeah I am pretty good.

  • Was your hypothesis not applicable?

it was applicable

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

no sir.

  • What shortcomings might there be in your experiment?

intelligence.

  • What shortcomings might there be in your data?

data is good.

Conclusions

make sure you put ; at the end of applicable statements.

Experiment 2

Question

What happens if you do not include a return; at the end of your program/function.

Resources

lab46

Hypothesis

I am not entirely sure I am assuming I will get some sort of syntax error but to be sure I will have to run it to find out.

Experiment

I am going to use my hello world! program once again that is deployed on lab46

Data

lab46:~$ nano hello.c
lab46:~$ gcc -o hello hello.c
lab46:~$ nano hello.c
lab46:~$ ./hello
Hello, World!

Analysis

Based on the data collected:

  • Was your hypothesis correct?

No sadly I was wrong the program still ran and now I feel foolish.

  • Was your hypothesis not applicable?

it was.

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

apparently :O

  • What shortcomings might there be in your experiment?

intelligence.

  • What shortcomings might there be in your data?

none.

Conclusions

The program still ran and complied with the return; statement line removed.

Experiment 3

Question

I am going to attempt to add the multiplication portion of project 2 into project 2.

Resources

I used the other functions addition and subtraction that I had help writing, more so addition because I figured add and multiply are alike in common sense than subtraction.

Hypothesis

The goal is that it will work in the program just the way the other functions do and multiply my 4 digit numbers correctly. oh yeah and compile. hopefully.

Experiment

I wrote the code (at least it seems like working code to me) into the program and I will attempt to compile it and run it on lab46

Data

lab46:~/src/cprog$ nano bignum.c
lab46:~/src/cprog$ gcc -o bignum bignum.c
lab46:~/src/cprog$ ./bignum
How many digits are in your largest number?
4
Please enter 1 to Add, 2 to Subtract, 3 to Multiply, 4 to Divide
3
Enter your first number
0010
Please enter your second number
0010
01870
lab46:~/src/cprog$

Analysis

Based on the data collected:

  • Was your hypothesis correct?

no it was not my program told me 10×10 = 1870

  • Was your hypothesis not applicable?

it was.

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

i have no idea.

  • What shortcomings might there be in your experiment?

knowledge of how to program

  • What shortcomings might there be in your data?

the intended answer.

Conclusions

I did not get the correct answer, I will have to figure it again a better way that produces the intended answer.

Part 2

Entries

Entry 5: March 26, 2012

The fact that I can not figure out how to use atoi has led me to use this opus entry on Type Conversions.

The C Programming Language 2nd edition by Kernighan and Ritchie says

“When an operator has operands of different types, they are converted to a common type according to a small number of rules. In general the only automatic conversions are those that convert a “narrower” operand into a “wider” one without loosing any information… A char is just a small integer, so chars may be freely used in arithmetic expressions. This permits considerable flexibility in certain kinds of character transformations. One is exemplified by this naive implementation of the function atoi, which converts a string of digits into its numeric equivalent.”

/* atoi: convert s to integer */
int atoi(char s[])
{
    int i, n;
 
    n = 0;
    for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
        n = 10 + n + (s[i] - '0');
    return n;
}    

That is all I really read and found in the book/index that specifically talked about the atoi function.

C Pocket Reference by Prinz & Kirch-Prinz

Conversion Between Strings and Numbers

“A variety of functions are declared in the header file stdlib.h to obtain numerical interpretations of the initial digit characters in a string. The resulting number is the return value of the function.”

int atoi( const char *s );
    /*Interprets the contents of the string s as a number with type int.  The analogous functions atol(), atoll()(*),
    and atof() are used to convert a string into a number with type long, long long(*), or double.*/

And that is pretty much what that book had to say about my problem so I guess I will go ahead and try to work on implementing this into my project bignum.c

Entry 6: March 30, 2012

for(x = digit1; x >= 0; x--)
{
    *(result+x) = *(value1+x) + *(value2+x) + *(result+x);
    if(*(result+x) > 9)
    {
        *(result+x) = *(result+x) - 10;
        *(result+x - 1) = *(result+x - 1) + 1;
    }
}

For this opus entry I am going to try and re-break down what Matt went over with me in the last class session.

The first line of the for loop in the the code block above is stating:

for the instance that the variable x equals the int digit1 and also the variable x is greater than or equal to zero decrement x by 1.

*(result+x) = *(value1+x) + *(value2+x) + *(result+x);

This line is saying that the pointer of result+x is equal to the pointer of value1+x plus the pointer of value2+x plus the pointer of result+x which has been zeroed out for the program.

if(*(result+x) > 9)

The if statement is creating a condition that if the pointer of result+x is greater than the number 9 to go on and do what other instructions are in the if statement.

    {
        *(result+x) = *(result+x) - 10;
        *(result+x - 1) = *(result+x - 1) + 1;
    }

Inside of the if statement as the code shown above is saying process this code when the if statement is true.

Take the current result x variable you are working with and subtract 10 and take the next result x variable to the left and add 1 to it.

Entry 7: April 3, 2012

Inheritance in object-oriented programming is a way to use code that you have previously included in a class, usually refered to as parent classes, base classes, or a superclasses. The new classes that are inheriting the base class are commonly refered to as child classes or subclasses and or derived classes.

#ifndef _RECTANGLE_H
#define _RECTANGLE_H
#include "shape.h"
 
class rectangle: public shape{
        public:
                virtual int perimeter();
                virtual int area();
};
#endif

As shown in the code block example above this file called rectangle.h would be inheriting the public classes code from the file shape.h making the parent file shape.h and the child file rectangle.h

Class inheritance has three different types of data:

Public:

Any other files in your inheritance tree that include the header files needed to use those public variables of the class you are trying to access can.

Protected:

Only a child file of the parent can use protected files, if a child is not directly pointed to the parent file they are trying to access protected data from that child file will not be able to access the protected portion of that code.

Private:

Private variables are only accessable by the class they are defined in, although they can be accessed through a call to a protected or public variable in the same class that has access.

Entry 8: April 5, 2012

The GNU Compiler Collection or (GCC) is a programming code compiler, a compiler is an application that uses source code written in a programming language and creates object code to have an executable program from the source code.

The languages the compiler can compile that we deal with in our class are C (gcc) and C++ (g++)

The compiler consists of a front-end and back-end

The front-end of the compiler handles the programming language setting up the information to be handled by the back-end

The back-end deals with converting the language into the specific target architecture

Keywords

cprog Keywords

cprog Keyword 9

Scope (Block, Local, Global, File)

Definition

Global Scope is defined outside of specific functions in the head section of a program and is usually accessible by the entire program.

File Scopes act about the same as Global scopes with the exception that the global scope is accessible by the whole program and the file scope is just accessible in that particular FILE.

Local Scope is defined within a specific function and is usually just relevant to that function and would not be recognized by another function it was not part of.

Block Scope is defined within a specific code block

{
Block Scope
}
Demonstration

Demonstration of the chosen keyword.

int x = 1; // global variable
12
13  int main()
14  {
15     int x = 5; // local variable to main
16
17     cout << "local x in main's outer scope is " << x << endl;
18
19     { // start new scope                                        
20        int x = 7; // hides x in outer scope                     
21                                                                 
22        cout << "local x in main's inner scope is " << x << endl;
23     } // end new scope                                          

cprog Keyword 10

Type Casting

Definition

Type Casting happens when you have a given expression and you convert or assign that expression another type.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

short a=2000;
int b;
b=a;

cprog Keyword 11

Selection Structures (if, case/switch)

Definition

An If selection structure is dependent on a condition statement, for example if something is true do this OR if something is false do this other thing.

A switch case selection structure is a shorter substitute to long if statements, a value variable is compared and or switched in each of the following cases for the programs structure.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

switch ( <variable> ) {
case this-value:
  Code to execute if <variable> == this-value
  break;
case that-value:
  Code to execute if <variable> == that-value
  break;
...
default:
  Code to execute if <variable> does not equal the value following any of the cases
  break;
}

cprog Keyword 12

Repetition/Iteration Structures (for, while, do while)

Definition

The repetition structure of a while loop allows for a statements execution to run repeatedly until the condition of that loop has been met.

The do while loop has the same structure as the while loop with the exception that do while loop tests the condition at the end of the loop structure so that the statement will be executed at least once.

The for loop handles all ( variable initialisation; loop condition; variable update ) in the same set of paraenteses.

Demonstration

Demonstration of the chosen keyword.

while LOOP

/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
    int count = 0;
    while(count < 10)
    {
    printf("%d\n", count);
    ++count;
    }
    return 0;
}

Alternatively (or additionally), if you want to demonstrate something on the command-line, you can do so as follows:

Sample output:

0
1
2
3
4
5
6
7
8
9

cprog Keyword 13

Structures (Declaration, Accessing Elements, Pointers to)

Definition

Structure Declarations are declared by the preset struct then followed by a variable name in c programming.

When accessing elements of a structure you need to call both the name of the struct and the variable name of the struct to access the individual elements.

You can also your Pointers to access elements inside of structs by declaring the pointer and implementing it to a global variable.

Demonstration
/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
    struct thisclass{
        int something
    }
    return(0);
}

cprog Keyword 14

typedef, enum, union

Definition

While structures define several fields data types a UNION is only used to define one location that may be addressed by different names.

type def gives you the ability to name and define your own variables with the use of a typedef statement.

enumerated data - used for variables that may only contain a set number of values, the variables are then referenced by the name or (tag).

Demonstration

typedef example

/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
    typedef int day_of_the_week; // Define the type for days of the week
    const int SUNDAY = 0;
    const int MONDAY = 1;
    const int TUESDAY = 2;
    const int WEDNESDAY = 3;
    const int THURSDAY = 4;
    const int FRIDAY = 5;
    const int SATURDAY = 6;
    /* Now to use it */
    day_of_the_week today = TUESDAY;
    return(0);
}

enum example

/*
 * Sample code block
 */
#include <stdio.h>
 
int main()
{
    enum day_of_the_week {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,FRIDAY, SATURDAY};
    /* Now use it */
    enum day_of_the_week today = TUESDAY;
    return(0);
}

cprog Keyword 15

Functions, Parameters (Pass by: Value, Address, Reference), Return Types, Recursion, Command-line arguments

Definition

Functions are sets of statements that contains three main parts a function header, function body and function prototypes functions can also be called on by a program from outside of that function.

Parameters are values within the functions.

When you pass a parameter by Reference you are changing the value of the parameter when you pass it.

When you pass the parameter by Value you are not changing the parameter just passing it along.

Command-Line Arguments are used for retrieving parameters entered by the user when using your program.

The Return Type is the syntax and definitions of values returned from a function.

Recursion is when a function can call on itself with out an acting outside call.

Demonstration

Functions

int main()
{
   ...
}

Recursion

int factorial(int n)
{
   if(n == 1 || n == 0)
   {
      return 1;
   }
   else
   {
      return n*factorial(n-1);
   }
}

Parameters

int main
{
   fctn(num1, 12);
}
 
void fctn(int arg1, int arg2)
{ ... }

cprog Keyword 16

Compiler, Preprocessor, Flags, Assembler, Linker, Multi-file programs (how to structure, how to compile)

Definition

The Compiler is the actual piece of software that turns your code into an executable.

The Preprocessor allows for your programs to include header files, macro expansions and conditional compilation.

Flags are used to optimize how you want to compile the code for example -wall -o etc…

An assembler takes source code to produce machine code.

A Linker takes the compiler's object files and puts them all together so the computer recognizes the files and runs them together as a program.

cprog Objective

cprog Objective

to learn how to become and effective programmer in the languages of c and c++

Definition

syntax

indenting format

compiling

functions

classes

Libraries

Header Files

Pointers

Arrays

etc…

Method

Well from knowing zero day 1 I now know more than zero.

Measurement

followed.

Analysis

Reflect upon your results of the measurement to ascertain your achievement of the particular course objective.

  • How did you do?

ok.

  • Is there room for improvement?

of course.

  • Could the measurement process be enhanced to be more effective?

not sure.

  • Do you think this enhancement would be efficient to employ?

n/a

  • Could the course objective be altered to be more applicable? How would you alter it?

more beginner focus.

Experiments

Experiment 4

Question

What will happen if you do not include the \n at the end of a printf statement.

Resources

lab46

Hypothesis

I am thinking that without the \n the printf statement will not display.

State your rationale. I am pretty sure \n is a terminator for the printf statement.

Experiment

I am going to test my hypothesis on lab46 with my hello.c program.

Data

lab46:~$ nano hello.c
lab46:~$ gcc -o hello hello.c
lab46:~$ ./hello
Hello, World!lab46:~$

Analysis

Based on the data collected:

  • Was your hypothesis correct?

No.

  • Was your hypothesis not applicable?

it was applicable.

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

No.

  • What shortcomings might there be in your experiment?

I guessed wrong.

  • What shortcomings might there be in your data?

None.

Conclusions

The program still complied and ran without the \n at the end of my printf statement but as you can see the command prompt ended up on the same line that the program executed the printf on.

So the \n is a line terminator and not a printf function terminator if that makes sense in the best of my ability to explain what I am experimenting.

Experiment 5

Question

For this experiment I will be seeing what will happen if the program does not include a main function and just includes statements.

Like this.

#include <stdio.h>
 
{
        printf("Hello, World!\n");
        return(0);
}

Resources

Lab46

Hypothesis

I am not sure what will happen I am assuming the program will not compile or function properly.

State your rationale.

I am thinking that the program needs a Function structure of some sort to run properly.

Experiment

going to test this on lab46

Data

lab46:~$ gcc -o hello hello.c
hello.c:3: error: expected identifier or '(' before '{' token

Analysis

Based on the data collected:

  • Was your hypothesis correct?

Yeah I believe this time it was I did get an error for an expected identifier.

  • Was your hypothesis not applicable?

it was applicable.

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

No I think the identifier the program is looking for is the main function.

  • What shortcomings might there be in your experiment?

None.

  • What shortcomings might there be in your data?

None.

Conclusions

The program did not compile when the line of

int main()

was removed from the program I am not 100% sure if it was asking for a function container, okay well i just did this experiment to test it further.

#include <stdio.h>
main()
{
        printf("Hello, World!\n");
        return(0);
}

and the program ran and compiled so the int was not necessary it was looking for a main() function or a function container in general I am guessing. Not sure if it has to named main() but that sounds like another experiment.

Retest 2

Perform the following steps:

State Experiment

Whose existing experiment are you going to retest? Provide the URL, note the author, and restate their question.

Resources

Evaluate their resources and commentary. Answer the following questions:

  • Do you feel the given resources are adequate in providing sufficient background information?
  • Are there additional resources you've found that you can add to the resources list?
  • Does the original experimenter appear to have obtained a necessary fundamental understanding of the concepts leading up to their stated experiment?
  • If you find a deviation in opinion, state why you think this might exist.

Hypothesis

State their experiment's hypothesis. Answer the following questions:

  • Do you feel their hypothesis is adequate in capturing the essence of what they're trying to discover?
  • What improvements could you make to their hypothesis, if any?

Experiment

Follow the steps given to recreate the original experiment. Answer the following questions:

  • Are the instructions correct in successfully achieving the results?
  • Is there room for improvement in the experiment instructions/description? What suggestions would you make?
  • Would you make any alterations to the structure of the experiment to yield better results? What, and why?

Data

Publish the data you have gained from your performing of the experiment here.

Analysis

Answer the following:

  • Does the data seem in-line with the published data from the original author?
  • Can you explain any deviations?
  • How about any sources of error?
  • Is the stated hypothesis adequate?

Conclusions

Answer the following:

  • What conclusions can you make based on performing the experiment?
  • Do you feel the experiment was adequate in obtaining a further understanding of a concept?
  • Does the original author appear to have gotten some value out of performing the experiment?
  • Any suggestions or observations that could improve this particular process (in general, or specifically you, or specifically for the original author).

Part 3

Entries

Entry 9: April 25, 2012

Wanted to revisit structs and unions from a class we had this semester.

When creating a struct you are making a record for a set of labelled objects into a single structured object.

Example:

struct sales {
    int month sales;
    char *item_name;
    char *item_type;
    float totals;
    };

This is an example of a struct declaration, which is a list of fields that can contain any types (int, char, etc…) and allocates a total amount of storage based on the sum requirements for all of the list types included, along with any internal padding.

A union is nearly the same as a struct except for the way a union allocates memory, each data type in the union starts from the same location in memory instead of having its own location like in a struct.

The concept of a union is to save space the multiple data types inside the union are being condensed into the same memory location.

Example:

union <name>
{
    <datatype>  <1st variable name>;
    <datatype>  <2nd variable name>;
    .
    .
    .
    <datatype>  <nth variable name>;
} <union variable name>;

Entry 10: May 1, 2012

Since we talked about inheritance at length this semester I will refresh on that with this journal entry.

Inheritance in programing has to do with the way classes relate to each other, for example there are two main types of classes in respect to programming inheritance parent classes and child/children classes.

Parent classes are the preceding classes that came before their children a lot like it would seem. Parent classes are also sometimes called superclasses, ancestor classes or base classes.

Child classes or subclasses are derived from their parent class and live in a hierarchy based system.

The application of using inheritance in programming is to relate two or more classes together.

Entry 11: May 8th, 2012

Figured I would write this opus entry on Header Files since that seems to be one of the thing I do grasp.

There are a few different instances of header files

There is the standard Library of header files which are already made files saved that included commonly used declarations that a program might need, for instance stdio.h which includes common input and output functions used in c programming and stdlib.h which includes standard collection of functions collected into a library file.

There are also header files that you can make on your own for instance if you wrote a function saved it and then included it in another function as a .h file that program will now use all the logic from the other instance your wrote with just the file included at the start of the new file as a .h file.

Entry 12: May 8th, 2012

Just going to scribble some things down here for the last entry as I go through some of the programs we accomplished in class this semester.

int main ( ) anything inside the parenthesis are parameters for main and the first parameter of main must be an integer. when on a line of code if you type a \ followed by enter the syntax is that the line will continue onto the next line below it but the program will read it as a single line of code even though for your viewing pleasure its broken up into more than one line of text. int sum(int, int, int, int); is a function prototype.

and so on…

cprog Keywords

cprog Keyword 17

I/O Streams (cin, cout, cerr, stream operators) [C++]

Definition

I/O Streams in C++ is an standard included library, the library consists of (basic class templates, class template instantiations, standard objects, types, and manipulators).

cin - is an object of the class of istream that notates the standard input stream, corresponding to cstdio stream. cin like most systems defaults its standard input from the keyboard.

cout - is an object of the class of ostream that notates the standard output stream, corresponding to cstdio stream.

cerr - is the standard output stream for errors.

cprog Keyword 18

Namespaces [C++]

Definition

Namespaces give groups like classes and functions a more global scope, for instance if you had two int's in your program but you wanted each to have its own global scope you could name one namespace first and the other namespace second like in the example shown below.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

// using
#include <iostream>
using namespace std;
 
namespace first
{
  int x = 5;
  int y = 10;
}
 
namespace second
{
  double x = 3.1416;
  double y = 2.7183;
}
 
int main () {
  using first::x;
  using second::y;
  cout << x << endl;
  cout << y << endl;
  cout << first::y << endl;
  cout << second::x << endl;
  return 0;
}
cprog Keyword 19

Type Casting Operators, Const-Volatility Specifiers (const, volatile) [C++]

Definition

casting operators remove c syntax inherent for the purpose of making the types more compatible with c++, there are several casting operators.

dynamic_cast - conversion of polymorphic types.

static_cast - conversion of non polymorphic types.

const_cast - removes the const, volatile, and _unaligned attributes

reinterpret_cast - simple reinterpretation of bits.

safe_cast - produce verifiable MSIL.

cprog Keyword 20

Classes (Objects, Constructor, Destructor, Access Control, Public, Protected, Private, Friend, “this” pointer) [C++]

Definition

A class allows you to put functions inside of a data structure for the purpose of organization and ease of use.

A constructor is a function that can be included within a class that can be automatically called whenever a new object is created within that class for the reason of avoiding returning unexpected values.

Destructors are called automatically when an object is destroyed with the purpose of releasing previously allocated memory.

Access Control breaks down into the Public, Protected, and Private data type sub class definitions.

Public variables and data types are accessible to the program outside of the class

Protected are accessible but may not be changed

Private variables and data types are only available inside that specific class they are defined in and may not be acted upon by the outside program.

this pointer can only be used as a nonstatic member function of a class, struct, or union.

Demonstration

Demonstration of the chosen keyword.

If you wish to aid your definition with a code sample, you can do so by using a wiki code block, an example follows:

class example{
    public:
        int a;
        int b;
        int c;
        int d;
    private:
        int e;
        int f;
    protected:
        int g;
};
 
cprog Keyword 21

Inheritance (single, multiple Inheritance), Polymorphism/Virtual Functions, Abstract Base Class [C++]

Definition

Inheritance in object oriented programming is used to create a relationship between two or more classes.

when using single class inheritance it means pretty much what it sounds like a sub class can only inherit from one super class or parent class.

and obviously multiple inheritance means that you can inherit information in your subclasses from more than one parent class.

Polymorphism with pointers using the ability that a pointer to a derived class is then compatible with a pointer to it's base class also.

Virtual members or functions are members of a class that can be changed in a derived class.

An abstract class is designed to be a base class that contains a pure virtual function.

Demonstration
class A 
{ public:
   void DoSomethingALike() const {}
};
 
class B : public A 
{ public:
   void DoSomethingBLike() const {}
};
 
void UseAnA(A const& some_A)
{
   some_A.DoSomethingALike();
}
 
void SomeFunc()
{
   B b;
   UseAnA(b); // b can be substituted for an A.
}
cprog Keyword 22

Overloading (Functions, Operators) [C++]

Definition

Overloading means that you are assigning more than one name for the same function or operator in the same scope.

Demonstration

Example I found showing Function Overloading.

#include <iostream>
using namespace std;
 
void print(int i) {
  cout << " Here is int " << i << endl;
}
void print(double  f) {
  cout << " Here is float " << f << endl;
}
 
void print(char* c) {
  cout << " Here is char* " << c << endl;
}
 
int main() {
  print(10);
  print(10.10);
  print("ten");
}

Alternatively (or additionally), if you want to demonstrate something on the command-line, you can do so as follows:

 Here is int 10
 Here is float 10.1
 Here is char* ten
cprog Keyword 23

Exception Handing (throw, try, catch) [C++]

Definition

An exception in programming is when a program has a situation that has an unexpected circumstance that happens in that section of the programs code. To handle these exceptions their are programming keywords in place like (throw, try, and catch).

catch is used as a preemptive guard against exceptions.

throw is used as a handler after and exception has occurred and tells the program to get rid of or throw the bad segment or unexpected circumstance for the section of code.

try is used as a handler for after an exception is realized as well and instead just telling the program to toss the bad line or code out it gives an instance of instead to try.

cprog Keyword 24

Templates, STL (Standard Template Library) [C++]

Definition

The Standard Template Library is made of predefined class for C++ and provides components called algorithms, containers, functional, and iterators.

cprog Objective

I already filled this out twice

Experiments

Experiment 7

Question

What will happen if i replace a for loop with a while loop in my program. as shown here

#include<stdio.h>
#include<stdlib.h>
 
int main(int argc, char **argv) //parameters are in the ( ), first parameter of main must be an integer
{
        unsigned char i;
 
        if(argc<2)
        {
                printf("%8s must be run with 1 or\
 more arguments, you only provided %hhu\n",*(argv+0),(argc-1));
                exit(1); // \ followed by enter allows you to continue code on new line
        }
        printf("You ran this program with %hhu arguments, they are:\n",(argc-1));
        for(i=1;i<argc;i++)
        {
                printf("argv[%hhu]: %s\n",i,*(argv+i));
        }
        return(0);
}

I am going to replace the for loop in this program with a while loop and see what happens.

Resources

lab46

Hypothesis

I do not have a clue what it will do. My best guess is break something.

State your rationale.

Seems like something that would break something.

Experiment

lab46

Data

lab46:~/src/cprog$ nano sample1.c
lab46:~/src/cprog$ gcc -o sample1 sample1.c
sample1.c: In function 'main':
sample1.c:15: error: expected ')' before ';' token

Analysis

Based on the data collected:

  • Was your hypothesis correct?

Yep it broke

  • Was your hypothesis not applicable?

it was

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

no I think it just produces a syntax error

  • What shortcomings might there be in your experiment?

none

  • What shortcomings might there be in your data?

none

Conclusions

I broke the program you can not just simply make a for loop a while loop

Experiment 8

Question

I am going to try and add a simple multiplication function to the file sample2.c where we had 4 int declared and the program calculating a sum and average.

Resources

lab46

#include<stdio.h>
#include<stdlib.h>
 
int sum(int,int,int,int); //function prototype
int average(int,int,int,int);
int main()
{
        int a,b,c,d;
        int avg;
        a=b=c=d=0;
        avg=0;
        printf("Enter first value: ");
        fscanf(stdin, "%d",&a);
 
        printf("Enter second value: ");
        fscanf(stdin, "%d",&b);
 
        printf("Enter third value: ");
        fscanf(stdin, "%d",&c);
 
        printf("Enter fourth value: ");
        fscanf(stdin, "%d",&d);
 
        fprintf(stdout,"the sum of %d, %d, %d, and %d is:%d\n",a,b,c,d,sum(a,b,c,d));
        fprintf(stdout,"the average of %d, %d, %d, and %d is:%d\n",a,b,c,d,average(a,b,c,d));
        return(0);
}
 
 
int sum(int n1, int n2, int n3, int n4)
{
        int total=0;
        total=n1+n2+n3+n4;
        return(total);
}
int average(int n1, int n2, int n3, int n4)
{
        int average=0;
        average=(n1+n2+n3+n4)/4;
        return(average);
}

Hypothesis

I am going to try and follow the code above and add a similar instance for multiplication to see if i can get it to work I assume this will be easier than project 2's concept.

State your rationale. project 2 was dealing with specific allocated 4 digit numbers and something like that i don't know this just looks like it is going to make more sense to me and maybe work.

Experiment

lab46

Data

lab46:~/src/cprog$ nano sample2.c
lab46:~/src/cprog$ gcc -o sample2 sample2.c
lab46:~/src/cprog$ ./sample2
Enter first value: 2
Enter second value: 2
Enter third value: 2
Enter fourth value: 2
the sum of 2, 2, 2, and 2 is:8
the average of 2, 2, 2, and 2 is:2
the product of 2, 2, 2, and 2 is:16
lab46:~/src/cprog$

Analysis

Based on the data collected:

  • Was your hypothesis correct?

Yeah it worked amazingly.

  • Was your hypothesis not applicable?

for once yes.

  • Is there more going on than you originally thought? (shortcomings in hypothesis)

no

  • What shortcomings might there be in your experiment?

no

  • What shortcomings might there be in your data?

no

Conclusions

It worked I am pretty much pro.

Retest 3

Perform the following steps:

State Experiment

Whose existing experiment are you going to retest? Provide the URL, note the author, and restate their question.

Resources

Evaluate their resources and commentary. Answer the following questions:

  • Do you feel the given resources are adequate in providing sufficient background information?
  • Are there additional resources you've found that you can add to the resources list?
  • Does the original experimenter appear to have obtained a necessary fundamental understanding of the concepts leading up to their stated experiment?
  • If you find a deviation in opinion, state why you think this might exist.

Hypothesis

State their experiment's hypothesis. Answer the following questions:

  • Do you feel their hypothesis is adequate in capturing the essence of what they're trying to discover?
  • What improvements could you make to their hypothesis, if any?

Experiment

Follow the steps given to recreate the original experiment. Answer the following questions:

  • Are the instructions correct in successfully achieving the results?
  • Is there room for improvement in the experiment instructions/description? What suggestions would you make?
  • Would you make any alterations to the structure of the experiment to yield better results? What, and why?

Data

Publish the data you have gained from your performing of the experiment here.

Analysis

Answer the following:

  • Does the data seem in-line with the published data from the original author?
  • Can you explain any deviations?
  • How about any sources of error?
  • Is the stated hypothesis adequate?

Conclusions

Answer the following:

  • What conclusions can you make based on performing the experiment?
  • Do you feel the experiment was adequate in obtaining a further understanding of a concept?
  • Does the original author appear to have gotten some value out of performing the experiment?
  • Any suggestions or observations that could improve this particular process (in general, or specifically you, or specifically for the original author).