# Functions

• 10-23-2006
aznballerlee
Functions
I just got my CS project today, and I read over it. It doesn't make sense to me.

Quote:

We have acquired some Dance Dance Revolution software that will display on a screen the sequence of arrows for a dance. The software requires as input a string of characters; each character is an instruction for what to display for one beat of the song. The characters are:

A full Dance Dance Revolution system has dances requiring a player to step on two different arrows at the same time (using both feet), and requiring several steps per beat (corresponding to eighth and sixteenth notes). For this project, we will assume something simpler: All dances require stepping on at most one arrow per beat. A step is either a tap, where the player steps on the arrow and then lifts the foot on the same beat, or a freeze, where the player steps on the arrow on one beat, and then keeps it there, lifting it off at a later beat.

Now for the bad news: The artists who design the dances are used to expressing them a different way. For them, a dance is expressed as a string like u//d/3r///d/, where a slash terminates every beat. This means "For the first beat, tap up. Nothing is required for the second beat. For the third beat, tap down. Starting on the fourth beat, freeze on the right arrow for three beats (the fourth, fifth, and sixth). For the seventh beat, tap down."

* l, d, u, or r, meaning to display an arrow indicating that the dancer should tap the left, down, up, or right arrow on the dance pad.
* L, D, U, or R, meaning to display an symbol indicating that the dancer should freeze a foot on the left, down, up, or right arrow on the dance pad.
* x, meaning to display nothing for this beat, indicating that the dancer is not required to step anywhere for this beat.

A well-formed dance is a sequence of zero or more beats. Here are some examples of well-formed dances:

* zero beats
* D/
* u//D/3r///d/
* 03u///10r//////////
* /// three beats

____________________________

For this project, you will implement the following two functions, using the exact function names, parameters types, and return types shown in this specification. (The parameter names may be different if you wish.)

bool isDanceWellFormed(string dance)

This function returns true if its parameter is a well-formed dance, and false otherwise.
int translateDance(string dance, string& instructions, int& badBeat)

If the parameter dance is translatable, the function sets instructions to the translation of the dance, leaves badBeat unchanged, and returns 0. In all other cases, the function leaves instructions unchanged. If dance is not well-formed, the function leaves badBeat unchanged and returns 1. If dance is well-formed but while a freeze is in effect, a beat not consisting of only a slash is present, badBeat is set to the number of that beat (where the first beat of the whole dance is number 1, etc.), and the function returns 2. If dance is well-formed but ends prematurely, badBeat is set to one more than the number of beats in the string, and the function returns 3. If dance is well-formed but a beat specifies a freeze of length less than 2, badBeat is set to the number of that beat, and the function returns 4. If the dance is well-formed but not translatable for more than one reason, report the leftmost occuring problem. (For example, if dance is 3r//u/0d//2u/, set badBeat to 3 and return 2.)

Your functions must not use any global variables.

When you turn in your solution, neither of the two required functions, nor any functions they call, may write any output to cout. (Of course, during development, you may have them write whatever you like to help you debug.) If you want to print things out for debugging purposes, write to cerr instead of cout. cerr is the standard error destination; items written to it by default go to the screen. When we test your program, we will cause everything written to cerr to be discarded instead -- we will never see that output, so you may leave those debugging output statements in your program if you wish.

Okay so this was the assignment. I have no idea what it asks for. I don't know how to start.

Someone told me that there's two parts: part 1 is to validate the strings, and part 2 is the translate the strings into valid characters.

How do I validate the strings when I don't have them .. ? Or do I just do a bunch of if statements, testing each possibility or strings?

Any help would be nice/
• 10-23-2006
Quote:

I have no idea what it asks for.

For this project, you will implement the following two functions, using the exact function names, parameters types, and return types shown in this specification. (The parameter names may be different if you wish.)

Quote:

I don't know how to start.
it tells you the 2 function prototypes and what they are required to do.

Quote:

Someone told me that there's two parts: part 1 is to validate the strings, and part 2 is the translate the strings into valid characters.
yes thats what it looks like it says. if the dance string is well-formed then you go ahead and translate it.

Quote:

How do I validate the strings when I don't have them .. ? Or do I just do a bunch of if statements, testing each possibility or strings?
the parameter in the first function will contain the string or 'dance'. for testing you can call the function yourself with some examples to test if your function is working or not. for example, if i called the function from my program as: isDanceWellFormed("########"); it should return false, if i called it as: isDanceWellFormed("///"); it should return true because as the example states this is 'well-formed.'
i dont think 'a bunch of if statements' is best way to go, think about what defines well-formed.. use pseudocode (english, basically) and post it here then we can help translate to code.

Quote:

Any help would be nice/
sure, however im sure many others will agree with me i say you wont get much more help than i have given, until you show some effort first. post some code or pseudocode on your attempts and SPECIFIC parts you are having trouble with.

dont post 'heres my assignment, do it (or show me how to)', because no one will. otherwise we'd be working for [your employer here].

good luck
• 10-23-2006
QuestionC
We're very gun-shy about helping out with school code. Understand that we get a lot of requests here for this around midterms.

Still, I sympathise with horrible specifications. Following is a main function which runs the translateDance function. From this code, you should be able to tell how translateDance should function. I suggest using it for testing.

Code:

```// Very simple main.  Only passes valid input strings. int main (void) {         string input;         string output;         int badBeat;         /*         * Normal Steps         */                intput = "u/d//l/r/";         translateDance (input, output, badBeat);         cout << output;         // Expected output: udxlr         input = "l//r///u/d/";         translateDance (input, output, badBeat);         cout << output;         // Expected output: lxrxxud         input = "u/u/u/u/d/";         translateDance (input, output, badBeat);         cout << output;         // Expected output: uuuud         /*         * Freezes         */         input = "3u///3r///";         translateDance (input, output, badBeat);         cout << output;         // Expected output: UUURRR         input = "2d///2l///";         translateDance (input, output, badBeat);         cout << output;         // Expected output: DDxLLx         input = "2l//u/2d//r/2r//";         translateDance (input, output, badBeat);         cout << output;         // Expected output: LLuDDrRR         return 0; }```
• Get some example input/output for translateDance from your teacher.
• Implement translateDance for valid input. Once you have a translateDance that properly handles good input, the rest should be a breeze.
• 10-24-2006
aznballerlee
What I have so far is this:

Code:

```#include <iostream> using namespace std; int translateDance // This is where I write a function for translateDance, but I don't know how. I'm guessing I have to test the different possibilities in the order / structure or the dance beats and freezes? (do if / else on those) and have it return false if the semantics are wrong? // I don't know what I did with the following lines. I got help today and they showed me this. But I don't really get it. int main() {                int i; for (i = 0, i =inputsize (); i++) {         if (input [i] >= '0' && input [i] <= '9')         {                 int digit = input [i] - '0';                 for (j= i+2; j< i+2 + digit; j++)                 {                         if (input [j] != "/")                                 cerr << "Error";                 }         }         }```
Question C:
intput = "u/d//l/r/";