Name: ____________________________________________________ Alpha: _____________________

Describe help received: _________________________________________________________________

1. [10pts] One nice feature of static arrays is that they can be initialized with value at the point of their definition in a single statment, unlike with dynamic arrays where you must first allocate, then give values one at a time. For example:
`double A[4] = { 1.2, 3.71, -0.5, -3.141 };`
So the array element values go inside { }'s in a comma-separated list. The first such value is the index 0 value, then index 1, and so on.

Suppose we use the previous Lab's representation of a card as `cardvale = 20*suitvalue + facevalue`, with 2-14 as the face values, and 0-3 as the suit values. Complete the function definition below, making use of the static array definitions for S and F. Note: the function should return a single string that is the "pretty print" version of the card represented by the single integer card value cv.

```string cardValueToString(int cv)
{
// note: clubs="\u2663", diamonds="\u2666", hearts="\u2665", spades="\u2660"
string S[4] = {"\u2663","\u2666","\u2665","\u2660"};
string F[15] = {"",""," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10"," J"," Q"," K"," A"};

}```
2. [10pts] Suppose we have a nice struct `point` for representing points. If I'm defining a struct `triangle` for representing triangles, I might choose to define the data member representing the verticies like this:
`point verts[3];`
On the other hand, if I'm defining a struct `polygon` for representing arbitrary polygons (triangles, squares, trapezoids, hexagons, etc.) I'd define it like this instead:
`point *verts;`
Why would I do it differently for polygons?

3. [10pts] Consider the following program:
```#include <iostream>
using namespace std;

int* foo()
{
int B[3] = {1,-2,7};
return B;
}

int main()
{
int* A = foo();
for(int i = 0; i < 3; i++)
cout << A[i] << endl;
return 0;
}```
Compiling and running this program yields this:
```~/\$ g++ hwex.cpp
hwex.cpp: In function 'int* foo()':
hwex.cpp:6:7: warning: address of local variable 'B' returned [enabled by default]
~/\$ ./a.out
1
0
269886254```
Explain what the problem is here? That doesn't mean parroting the warning back, but explaining what it means and why it's a problem and, if you can, why we get the crazy output shown in the sample run!
4. [70pts] Consider the program splitme.cpp (example run shown below). Your job is to split it (appropriately!) into separate .h and .cpp files and demonstrate that it still works. NOTE: this requires no new programming, just splitting into files and adding the right `#define`s.
```~/\$ g++ splitme.cpp -o bigdrop
~/\$ ./bigdrop
Laura 6 112.3@40 119.8@32 118.2@30 130.0@20 128.6@22 151.2@1
Biggest per day weight drop is 1.3```