Like the last exam you will get a file to download, which contains several functions. Please find the prototypes on the top, and the implementations after main. Next to the prototypes you will find the number of points a correct implementation gives you. Keep in mind that every compile error will give you -1 point, which means that I strongly suggest that you actually compile and run your code!

The code has the main function already done, and I also added a couple of functions myself to help me test your code and to provide you with a context. You will find that some of the calls to these functions do not happen, because they are commented. Please uncomment these functions if you want to test your code by yourself.

Because I want this game to be 4×4 big I defined a Macro called BoardSize which is set to 4, please always assume that the board is BoardSize times BoardSize never smaller, never bigger. Your code should run even if I set BoardSize to 5, or 3, or even 9.

This exam deals with the hypothetical game of Tic-Tac-Toc, a game similar to tic-tac-toe. You play it with three players, and take turns putting down numbers into a 4×4 grid. Each player has a number (1,2, or 3) while the 4×4 field starts out to be filled with 0 in the beginning. Each player can only set his/her number into a field that is empty. The player that either fills a row, or a column, or a square of size 2×2 anywhere in the grid wins.

Examples Three wins:

0101

2121

0202

3333

Two wins:

0201

3211

0201

3203

One wins:

1100

1123

2233

0000

You don’t have to program the entire game, but you have to complete all the functions I provided. I already defined two structures you have to use. The first is called Board, and contains a single pointer two a 2d array. Entries in the array of this structure should only be 1, 2, or 3 as they indicate which cell in the grid already belongs to which player.

The second structure I defined is called Move, it has an x and y coordinate, and a variable c which indicates the player who this move belongs to. Imagine the board is:

0000

0000

0000

0000,

and I have the Move x=1 y=1 c=1. This move applied to the current board will turn the board into:

0000

0100

0000

0000

There is another file called game.txt which contains a recorded game which at some point should be loaded and used.

The program you should write should have this naming convention:

CSE251_final_AH.c – where AH are my initials and they are to be replaced with your initials of cause.

I will call the program using game.txt as the first and only command line parameter, like so:

CSE251_final_AH game.txt

Good luck, enjoy, Arend

and if you want to test your lode function independently here is a winning board file:

winningBoard

The code I used in the lecture:

main

basics:

main

And the PDF of the last lecture:

lecture13

You can also give feedback here: http://soct.msu.edu/

Cheers Arend

]]>Otherwise here are the various files we needed or made in this lecture:

example

list

main

structExample

And the lecture itself:

lecture12

And here is a link that explains linked lists again:

Linked List in C Tutorial

Cheers Arend

]]>As you have seen an array of char is synonymous with a point to char that got the same size memory allocated to it. Find todays lecture

herelecture11. The homework is somewhat challenging because it requires you to juggle with arrays, string, and files, as well as loops. Start early, and try hard to solve this on your own. You can also use this demo file:poem as a test.

Cheers Arend ]]>

well, pointers are a straight forward concept. Instead of using variables to store values, you can use pointers to access memory “directly” to again use it to store values. I am aware that at first it will feel somewhat obsolete, and you should think so. So far we also never encountered any situation in which they were necessary – but trust me they will become the bread and butter in your programmer lives.

First check out the lecture here:lecture 10. Todays homework is to make a program that uses pointers and you should make up the task to perform. While this might feel random, tis is a fairly realistic situation. Essentially everything I program, be it a game or a scientific simulation tries to fulfill a purpose that I came up with. In reality you will rarely encounter a situation where someone says: make a program that does X using Y as data and output into Z. You will be in a situation where you need to solve problem X and you have constrains and resources, and you have to figure out what your code is supposed to do. Consider this a more realistic situation.

Please read all pages I provided links for in the presentation. BTW: a link is somehow like a pointer, instead of storing the value, it “points” to a place where you can find actual content (or more pointers/links).

Cheers Arend

]]>Today we visited three very similar problems. Dealing with 2d arrays, getting command line parameters into a 2d array, and performing other operations in a 2d array. We learned an important concept, and that is command line parameters. Instead of giving your code inputs like in a dialog, where the program asks and gets inputs, you can hand parameters over to your program by simply writing them after the program call. You just need to separate them by blanks. Unfortunately these arguments are of type char * which means we have to convert them to other types in case they represent values. Converting an argument to an int requires atoi() and an argument to a float requires atof(). Check out our examples here:lecture 9 and the code for the tictactoe.c program is here:tictactoe . Next time I will go into dynamic memory allocations and pointers, which means I assume from now on that you are familiar with arrays and how to use loops.

Cheers Arend

]]>This is the description of our first exam. You will have 60 minutes to complete it. Your objective is to write a program that performs ten different functions, at best. Below you will find the ten functions you have to code. Each function has a different difficulty and gives points related to that. In total you could score up to 52 points. I do not expect that from you, so we set a 100% score to 30 points. Points you score above 3o will be added as a bonus to your homework assignments. You have to score at least 15 points to not get a F in this test. This is a closed book, no internet exam. If we see you mailing (except to submit the exam in the end), texting, calling, facebooking, browsing, or any similar thing, we will fail you!

Here are the 10 functions you have to code, with their corresponding point they give:

1) 3 Points: print the numbers 9 to 0, count the lines incrementally while doing so

example:

1. 9

2. 8

3. 7

…

10. 0

2) 3 Points: print a solid box of * size 5×5, example:

*****

*****

*****

*****

*****

3) 5 Points: make an empty box of * with size N time M

emptyBoxSize(3,4); ->

****

*..*

****

I used . to indicate blanks (space)

4) 5 Points: make a / from * of size N example:

dashLeftSize(3); ->

..***

.***

***

I used . to indicate blanks (space)

5) 5 Points: return the value of A B or C that is not the highest and not the lowest

example: printf(“%i\n”,getMiddleNumber(1,2,3)); -> 2

6) 7 Points: you get the array N of size 100 filled with numbers,

within this function N[100] exists, return the lowest number in this array

7) 7 Points: make floyds triangle with N lines:

Floyds triangle is a triangle of numbers startin by one and counting up,

each line contains one more number, example:

makeFloydsTriangleForNlines(4)->

1

2 3

4 5 6

7 8 9 10

makeFloydsTriangleForNlines(5)->

1

2 3

4 5 6

7 8 9 10

11 12 13 14 15

8) 7 Points: you get the array N of size 100 filled with numbers,

return the count of numbers below M

9) 9 Points: you get the array N of size 100 filled with numbers,

count how often the number X occurs in the Array N, and return that value

10) 1 Points: printf you first,middle (if existent),last name

example in my case: yourName(); -> Arend Hintze

You must download the template file here:mainplease rename it into exam_yourfullname.c and mail this file to me at the end of the exam, as you would do that with your homework. As an alternative, if mailing doesn’t work, you can submit your file by copy and pasting it as a comment to this post.

The template file is organized in such a way, that you only need to fill in the functions, the rest is already setup so that we have it easy when correcting your exam. The template file has a brief description of the ten functions, and ten templated functions. The main() function should not be altered. The main is followed by the ten functions to implement. Each function contains the question description again as a comment, and an example of what it should do.

I highly recommend that you test your code by compiling it! Save often, and make copies, so not accidentally erase already working code!

Good luck, Cheers Arend

br /

]]>Cheers Arend

]]>A N 0

A R 9

C R 4

D K 10

D M 10

D S 10

D Z 10

F L 10

G J 10

G W 10

H K 10

J G 10

J L 6

J M 6

J S 6

J W 10

K W 10

M J 10

M R 10

M S 8

N H 0

R B 10

R L 10

R S 4

S G 10

T P 10

T S 10

X Z 10

Y J 10

Cheers Arend

]]>Cheers Arend

Simple:

-count from 1 to 19

-count from 2 to 22, using intervals of 2

-count from 234 backwards to 7

-make a function that counts from S to E using an I interval print letter C in every line next to the number you are currently counting

-make a square size 5×5

-make a function that makes a NxM square, and print the size of it

-sum 100 random numbers

-convert C in F, F in C, inch in cm, cm in inch – all using functions

Medium:

-make Floyds triangle

-count from 1 to N, each time you generate a random number between 0 and the count you are at, print the mean of all numbers

-print a chess board with letters and numbers as indexes next to it

-make 100 random numbers in the range from 1..N, find the lowest and highest

-count from 1 to 100, print the number, but print “tick” instead of the number every third count, print “tock” instead of the number every 5th count, the 15th count will read “ticktock” instead of the number

-make a random number between 0..100 let the computer guess it as well.

-make a function that takes three int parameters A, B, and C. If C is 0 return true if A equal to B, if C is -1 return true if A is bigger than B, if C is 1 return true if A is smaller than B, return false in all other cases

-make a function that takes three int parameters A, B, and C. Compare the values and return the value in the middle

Hard:

-make Floyds triangle backwards, starting with 76 until you hit 0

-simulate a one dimensional random walk, measure the mean number of updates it takes for the random walk to get back to the origin

-make a function that returns the distance between 2 points, each point defined by an X and Y position

-make two arrays called X and Y of size 10 each. X and Y define the coordinate of a point, use this to create 10 random points, and find the point pair with the closest distance