Thread: Functions

  1. #1
    Registered User
    Join Date
    Oct 2006
    Posts
    2

    Functions

    I just got my CS project today, and I read over it. It doesn't make sense to me.


    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

    ____________________________

    Your task ...

    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.)

    These are the only two functions you are required to write. (Hint: translateDance may well call isDanceWellFormed.) Your solution may use functions in addition to these three. While we won't test those additional functions separately, their use may help you structure your program more readably. Of course, to test them, you'll want to write a main routine that calls your functions. During the course of developing your solution, you might change that main routine many times. As long as your main routine compiles correctly when you turn in your solution, it doesn't matter what it does, since we will rename it to something harmless and never call it (because we will supply our own main routine to throroughly test your functions).

    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/
    Last edited by Dave_Sinkula; 10-23-2006 at 09:01 PM. Reason: Changed [code][/code] tags to [quote][/quote] tags.

  2. #2
    Registered User
    Join Date
    Oct 2006
    Location
    Canada
    Posts
    1,243
    I have no idea what it asks for.
    Your task ...

    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.)

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

    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.

    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.

    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

  3. #3
    Registered User
    Join Date
    Sep 2001
    Posts
    752
    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;
    }
    My advice:
    • 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.
    Callou collei we'll code the way
    Of prime numbers and pings!

  4. #4
    Registered User
    Join Date
    Oct 2006
    Posts
    2
    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/";
    translateDance (input, output, badBeat);
    cout << output;
    // Expected output: udxlr

    My goal is to find an input "equation" right? That would be step 2?
    Since step 1 would be verifying the validity of characters in the input?

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Void Functions Help
    By bethanne41 in forum C++ Programming
    Replies: 1
    Last Post: 05-09-2005, 05:30 PM
  2. Functions and Classes - What did I do wrong?
    By redmage in forum C++ Programming
    Replies: 5
    Last Post: 04-11-2005, 11:50 AM
  3. calling functions within functions
    By edd1986 in forum C Programming
    Replies: 3
    Last Post: 03-29-2005, 03:35 AM
  4. Factory Functions HOWTO
    By GuardianDevil in forum Windows Programming
    Replies: 1
    Last Post: 05-01-2004, 01:41 PM
  5. Shell functions on Win XP
    By geek@02 in forum Windows Programming
    Replies: 6
    Last Post: 04-19-2004, 05:39 AM